Java 如何将单个字符从字符数组转换为字符串?

Java 如何将单个字符从字符数组转换为字符串?,java,arrays,for-loop,character,Java,Arrays,For Loop,Character,我使用这个for循环从字符串中遍历数组的各个字符 for(int i=0;i< array;i++){ for(int i=0;i

我使用这个for循环从字符串中遍历数组的各个字符

for(int i=0;i< array;i++){
for(int i=0;i
我需要使用g.drawString逐个打印字符。因此,我需要将数组中位置[I]处的字符转换为字符串。如何执行此操作?

您可以使用:

String.valueOf(yourChar)
所以你的循环是:

for(int i=0;i< array;i++){
 g.drawString(String.valueOf(yourString.charAt(i));
}
for(int i=0;i
很简单:
“”+array.charAt(i)
只要这样做:

char[] array;

g.drawString(String.valueOf(array[i]));

这是最佳实践方式:

char[] array;
for (char c : array) {
    String s = String.valueOf(c);
    // do something with s
}

通常,最好的方法是如果源是字符串:

因为它避免了不必要的字符缓冲区拷贝。一些Java版本(显然是JDK7u5和更早版本)可以重用现有的字符缓冲区,这样就避免了额外的对象创建。 (请参阅:,表明这适用于JDK7u5及之前的版本)

有两个非常明显的替代方案(如果您有自己的
char[]
作为数据源,此方案也适用):

它们实际上将创建两个对象:一个
String
和一个
char[1]

然后是丑陋的黑客行为:

"" + str.charAt(i); // If you do do not care about doing things right.
这通常会导致使用单个追加操作创建字符串缓冲区,并将其转换为字符串。如果在热循环中使用此代码,可能会严重影响应用程序的性能。虽然代码看起来非常简单,但可能会转换为:

StringBuilder temp = new StringBuiler("");
temp.append(str.chatAt(i));
temp.toString();
考虑到API中有两种干净的解决方案:将字符转换为字符串和构造子字符串,这种开销实际上是毫无用处的

char[] chars = {'a','b','c'};
    String[] strings = new String[chars.length];
    for (int i = 0; i < chars.length; i++) {
        strings[i] = String.valueOf(chars[i]);
    }
char[]chars={'a','b','c'};
字符串[]字符串=新字符串[chars.length];
for(int i=0;i
如果您不想将单个字符转换为字符串,请使用character+”;@AchintyaJha虽然有效,但不建议使用这种方法,但可能会非常低效。什么是数组?char[]?我使用char array[]=s.tocharray();从字符串生成字符数组。@HG使用
s.substring(I,I+1)
而不是将字符串复制到
char[]
中。哎哟。你有没有分析过这个,或者检查过它翻译成什么代码?@Anony Mousse是的,我知道,它构造了新的
字符串
对象(JLS 15.18.1)。我不认为特别是这个问题会导致一些严重的性能问题。你认为呢?@Anony Mousse BTW
String.valueOf(char c)
还可以构造新的
字符串
。它可能只遵循JLS 15.18.1.2,因此为了构造字符串对象,它首先构建一个
StringBuilder
对象,然后附加到该对象。谁告诉aray是字符串?它可以是字符array@AlexWien在这种情况下,你仍然可以求助于第二种方法g、 应该使用第一种。这是API的直接使用。这会产生一个错误“找不到适合drawString(String)的方法”。我还需要为字符串输入坐标。请注意,
String.valueOf(yourString.charAt(I))
是执行
yourString.substring(I,I+1)的低效且不必要的复杂方法
@Anony mouse这是一个非常有趣的语句。为什么
valueOf
的效率不如
子字符串
?它们都构造了新的
字符串
对象。@andemoniy它构造了一个新的
字符串
包装一个新的
字符
,而不是一个新的
字符串
重用旧的
字符[]
。所以它的价格大约是原来的两倍。@Anony Mouse For Oracle Java,根据它的来源,它只是:
this.value=Arrays.copyOfRange(value,offset,offset+count)
。所以它以任何方式复制子数组。
StringBuilder temp = new StringBuiler("");
temp.append(str.chatAt(i));
temp.toString();
char[] chars = {'a','b','c'};
    String[] strings = new String[chars.length];
    for (int i = 0; i < chars.length; i++) {
        strings[i] = String.valueOf(chars[i]);
    }