3 回答
TA贡献1876条经验 获得超6个赞
您正在寻找的方法是charAt。这是一个例子:
String text = "foo";
char charAtZero = text.charAt(0);
System.out.println(charAtZero); // Prints f
有关更多信息,请参见上的Java文档String.charAt。如果想要另一个简单的教程,这一个或这一个。
如果您不希望将结果作为char数据类型,而是作为字符串,则可以使用以下Character.toString方法:
String text = "foo";
String letter = Character.toString(text.charAt(0));
System.out.println(letter); // Prints f
如果您想要有关Character类和toString方法的更多信息,我从Character.toString的文档中提取了我的信息。
TA贡献1803条经验 获得超3个赞
你要 .charAt()
这是一个教程
"mystring".charAt(2)
退货 s
如果您想拥有一个字符串,可以通过以下两种方法将字符转换为字符串:
String mychar = Character.toString("mystring".charAt(2));
要么
String mychar = ""+"mystring".charAt(2);
甚至
String mychar = String.valueOf("mystring".charAt(2));
例如。
TA贡献1911条经验 获得超7个赞
对于Unicode基本多义平面以外的字符编码的代理对,提出的答案均不适用。
这是一个使用三种不同技术来迭代字符串的“字符”(包括使用Java 8流API)的示例。请注意,此示例包含Unicode补充多语言平面(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.
}
使用Stream API遍历代码点
第三种解决方案与第二种基本相同,但是使用的是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之外的字符。另一方面,其他两个解决方案可以很好地处理代理对。
添加回答
举报