从 java 中的字符串中读取字符的最佳和有效方法是什么

What is the best and effective way to read chars from string in java

我想知道在不影响内存和程序性能的情况下读取字符串的有效方法。

我有以下实现:

String x = "<BigBus><color>RED</color><number>123</number>........</BigBus>";
    char[] xh = new char[x.length()];
    for(int i=0;x.length();i+) {
       ch[i]=x.charAt(i);
       System.out.println(ch[i]);
    }

示例字符串较大且有多行。

字符串中有方法toCharArray()

"aab".toCharArray()

但是这个方法无论如何都需要额外的内存来存放新的字符数组

为什么要将字符串的所有字符存储在一个数组中?如果你只是想一个一个打印字符,没有必要将它们存储在一个数组中。

您的 for 循环行也包含错误。

String x = "<BigBus><color>RED</color><number>123</number>........</BigBus>";

for(int i=0; i < x.length(); i++) {
    char c = x.charAt(i);
    System.out.println(c);
}
xh = x.toCharArray();

这将解决问题

最好的解决方案是为此使用 Java 8 个特征。

方法chars() returns 来自给定字符串的字符。但它只打印字符数值。为了方便起见,我们必须添加实用方法:

public class IterateString {

    private static void printChar(int aChar) {
        System.out.println((char) (aChar));
    }

    public static void main(String[] args) {
        String str = "<BigBus><color>RED</color><number>123</number>........</BigBus>";

        str.chars()
                .forEach(IterateString::printChar);

        // other options
        System.out.println();
        str.chars()
            .mapToObj(ch -> (char) ch)
            .forEach(System.out::println);

        System.out.println();
        str.chars()
            .filter(Character::isDigit)
            .forEach(IterateString::printChar);
    }
}

使用 streams 你有很多好处,如惰性计算、lambda 语法、方法引用...... 如需更多信息,请关注 java 8 个功能。

顺便说一句
您的代码片段有一些错误,应该如下所示:

    for (int i = 0; i < str.length(); i++) {
        ch[i] = str.charAt(i);
        System.out.println(ch[i]);
    }

而不是:

char[] xh = new char[x.length()];
for(int i=0; x.length(); i+) {
   ch[i] = x.charAt(i);
   System.out.println(ch[i]);
}