我知道如何计算字符串中某个字符或数字的索引,但是有没有任何预定义的方法可以用来给我 nth 位置的字符?所以在字符串“foo”中,如果我要求索引为0的字符,它将返回“f”。
注意 - 在上面的问题中,“字符”我不是指char数据类型,而是字符串中的字母或数字。这里重要的是我在调用方法时没有收到char,而是一个字符串(长度为1)。我知道substring()方法,但我想知道是否有更简洁的方法。
答案 0 :(得分:315)
您正在寻找的方法是charAt
。这是一个例子:
String text = "foo";
char charAtZero = text.charAt(0);
System.out.println(charAtZero); // Prints f
有关详细信息,请参阅Java documentation on String.charAt
。如果您想要另一个简单的教程this one或this one。
如果您不希望结果为char
数据类型,而是字符串,则可以使用Character.toString
方法:
String text = "foo";
String letter = Character.toString(text.charAt(0));
System.out.println(letter); // Prints f
如果您想了解有关Character
课程和toString
方法的更多信息,请从the documentation on Character.toString提取我的信息。
答案 1 :(得分:37)
您想要.charAt()
"mystring".charAt(2)
返回s
如果你想要一个字符串,有几种方法可以将字符串转换为字符串:
String mychar = Character.toString("mystring".charAt(2));
或
String mychar = ""+"mystring".charAt(2);
甚至
String mychar = String.valueOf("mystring".charAt(2));
例如。
答案 2 :(得分:8)
根据您的要求,您对substring()
非常感兴趣。标准方式是charAt()
,但是你说你不接受char数据类型。
答案 3 :(得分:7)
建议的答案都不适用于用于编码Unicode Basic Multiligual Plane之外的字符的代理对。
这是一个使用三种不同技术迭代字符串“字符”的示例(包括使用Java 8流API)。请注意,此示例包含Unicode Supplementary Multilingual Plane(SMP)的字符。您需要一个合适的字体来正确显示此示例和结果。
// String containing characters of the Unicode
// Supplementary Multilingual Plane (SMP)
// In that particular case, hieroglyphs.
String str = "The quick brown jumps over the lazy ";
第一个解决方案是对字符串的所有char
进行简单循环:
/* 1 */
System.out.println(
"\n\nUsing char iterator (do not work for surrogate pairs !)");
for (int pos = 0; pos < str.length(); ++pos) {
char c = str.charAt(pos);
System.out.printf("%s ", Character.toString(c));
// ^^^^^^^^^^^^^^^^^^^^^
// Convert to String as per OP request
}
第二个解决方案也使用显式循环,但访问个人 代码点codePointAt并相应地将循环索引递增到charCount:
/* 2 */
System.out.println(
"\n\nUsing Java 1.5 codePointAt(works as expected)");
for (int pos = 0; pos < str.length();) {
int cp = str.codePointAt(pos);
char chars[] = Character.toChars(cp);
// ^^^^^^^^^^^^^^^^^^^^^
// Convert to a `char[]`
// as code points outside the Unicode BMP
// will map to more than one Java `char`
System.out.printf("%s ", new String(chars));
// ^^^^^^^^^^^^^^^^^
// Convert to String as per OP request
pos += Character.charCount(cp);
// ^^^^^^^^^^^^^^^^^^^^^^^
// Increment pos by 1 of more depending
// the number of Java `char` required to
// encode that particular codepoint.
}
第三个解决方案与第二个解决方案基本相同,但使用Java 8 Stream API:
/* 3 */
System.out.println(
"\n\nUsing Java 8 stream (works as expected)");
str.codePoints().forEach(
cp -> {
char chars[] = Character.toChars(cp);
// ^^^^^^^^^^^^^^^^^^^^^
// Convert to a `char[]`
// as code points outside the Unicode BMP
// will map to more than one Java `char`
System.out.printf("%s ", new String(chars));
// ^^^^^^^^^^^^^^^^^
// Convert to String as per OP request
});
运行该测试程序时,您将获得:
Using char iterator (do not work for surrogate pairs !)
T h e q u i c k b r o w n ? ? j u m p s o v e r t h e l a z y ? ? ? ? ? ? ? ?
Using Java 1.5 codePointAt(works as expected)
T h e q u i c k b r o w n j u m p s o v e r t h e l a z y
Using Java 8 stream (works as expected)
T h e q u i c k b r o w n j u m p s o v e r t h e l a z y
如您所见(如果您能够正确显示象形文字),第一个解决方案无法正确处理Unicode BMP之外的字符。另一方面,另外两个解决方案与代理对配合得很好。
答案 4 :(得分:6)
您可以使用String.charAt(int index)
方法结果作为String.valueOf(char c)的参数。
String.valueOf(myString.charAt(3)) // This will return a string of the character on the 3rd position.
答案 5 :(得分:5)
这很简单:
String charIs = string.charAt(index) + "";
答案 6 :(得分:4)
将charAt
与您未获得char的要求结合起来的混合方法可能是
newstring = String.valueOf("foo".charAt(0));
但说实话,这并不比substring()
真正“整洁”。
答案 7 :(得分:2)
这是正确的代码。如果您正在使用zybooks,这将解决所有问题。
for (int i = 0; i<passCode.length(); i++)
{
char letter = passCode.charAt(i);
if (letter == ' ' )
{
System.out.println("Space at " + i);
}
}
答案 8 :(得分:0)
如果有人在苦苦挣扎,代码是:
scroll
这将返回位置1的char,在这种情况下为k 请记住,索引从位置0开始,因此在此示例中: kotlin将是k =位置0,o =位置1,t =位置2,l =位置3,i =位置4和n =位置5
答案 9 :(得分:0)
CodePointAt代替charAt更安全。当strtng中包含表情符号时,charAt可能会中断。
答案 10 :(得分:0)
CharAt 函数不起作用
Edittext.setText(YourString.toCharArray(),0,1);
此代码运行良好
答案 11 :(得分:-3)
像这样:
String a ="hh1hhhhhhhh";
char s = a.charAt(3);