Я знаю, как определить индекс определенного символа или числа в строке, но есть ли какой-нибудь предопределенный метод, который я могу использовать, чтобы дать мне символ в n-й позиции? Таким образом, в строке «foo», если бы я запросил символ с индексом 0, он вернул бы «f».
Примечание. В приведенном выше вопросе под «символом» я подразумеваю не тип данных char, а букву или цифру в строке. Здесь важно то, что при вызове метода я получаю не символ, а строку (длиной 1). И я знаю о методе substring (), но мне было интересно, есть ли более аккуратный способ.
char
ценность? И он знает, как это сделать,substring()
но просто хочет "аккуратнее". К вашему сведению, я могу сказать, чтоsubstring()
это самый лучший способ.Character.toString
выполняет все необходимые требования и совсем не беспорядочно.substring()
напрямую.endIndex
(Второй параметр) изString.substring(int, int)
является эксклюзивным индексом, и он не будет бросать исключение дляindex + 1
тех пор , покаindex < length()
- что верно даже для последнего символа в строке.Ответы:
Метод, который вы ищете, это
charAt
. Вот пример:Для получения дополнительной информации см. Документацию по Java
String.charAt
. Если вы хотите другой простой учебник, этот или этот .Если вам не нужен результат как
char
тип данных, а как строка, вы должны использоватьCharacter.toString
метод:Если вам нужна дополнительная информация о
Character
классе иtoString
методе, я извлек свою информацию из документации на Character.toString .источник
Вы хотите
.charAt()
Вот учебник
возвращается
s
Если вы склонны к наличию строки, есть несколько способов преобразовать символ в строку:
Или
Или даже
Например.
источник
Character.toString
?String mychar = String.valueOf("mystring".charAt(2));
String mychar = ""+"mystring".charAt(2);
потому, что оно наиболее лаконично. Другие будут расходиться во мнениях по этому поводу.Ни один из предложенных ответов не работает для суррогатных пар, используемых для кодирования символов за пределами базовой мультиязычной плоскости Unicode .
Вот пример, использующий три различных метода для перебора «символов» строки (включая использование потокового API Java 8). Обратите внимание, что этот пример включает символы дополнительной многоязычной плоскости (SMP) Unicode. Вам нужен правильный шрифт, чтобы правильно отобразить этот пример и результат.
Итерация символов
Первое решение - простой цикл по всей
char
строке:Итерация кодовых точек
Второе решение также использует явный цикл, но получает доступ к отдельным кодам с помощью codePointAt и увеличивает индекс цикла в соответствии с charCount :
Перебирать кодовые точки с помощью Stream API
Третье решение в основном такое же, как и второе, но с использованием Java 8 Stream API :
Полученные результаты
Когда вы запускаете эту тестовую программу, вы получаете:
Как вы можете видеть (если вы умеете правильно отображать иероглифы), первое решение не обрабатывает символы должным образом за пределами BMP Unicode. С другой стороны, два других решения хорошо работают с суррогатными парами.
источник
Вы довольно застряли
substring()
, учитывая ваши требования. Стандартный способ был быcharAt()
, но вы сказали, что не примете тип данных char.источник
toString()
он не будет работать с ним, иvalueOf()
только для чисел (думаю, я могу ошибаться), так как мне преобразовать char в строку?char
»Character.toString
должен работать (это статический метод изCharacter
класса.Вы можете использовать
String.charAt(int index)
метод result в качестве параметра для String.valueOf (char c) .источник
Гибридный подход в сочетании
charAt
с вашим требованием не получить чар может бытьНо это не совсем "аккуратно",
substring()
если честно.источник
Это так просто, как:
источник
Вот правильный код. Если вы используете zybooks, это решит все проблемы.
источник
если кто-то борется с kotlin, код:
это вернет символ в позиции 1, в этом случае k запомните, индекс начинается в позиции 0, поэтому в этом примере: kotlin будет k = позиция 0, o = позиция 1, t = позиция 2, l = позиция 3, я = положение 4 и n = положение 5
источник
Как это:
источник
String
желательна длина 1, а не аchar
.charAt()
в качестве возможного решения. Что добавляет этот ответ?charAt()
используют индексы, основанные на 1, имея только другой символ вa
третьей позиции. Если бы это было правдой, то для вас было бы лучше сказать или объяснить это, чем намекать на это. В действительности это не так:charAt()
использует индексы, основанные на 0, такs
и будет'h'
.