字符串到字符数组

String to Character Array

我的以下代码有问题:

public class stringToChar {
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    char[] sCharArr;
    String[] odd = new String[n];
    String[] even = new String[n];
    for(int i = 0; i < n; i++) {
        sCharArr = in.next().toCharArray();
        for(int j = 0; j < sCharArr.length; j++) {
            if(j % 2 == 0)
                even[i] += sCharArr[j];
            else
                odd[i] += sCharArr[j];
        }
   }
   for(int i = 0; i < n; i++) {
       System.out.println(even[i] + "  " + odd[i]);
   }
 }
}

我的问题是输出结果中有一个 Null。这是一个示例场景:

2
John
Cena

答案应该是:

Jh  on
Cn  ea

但我的代码答案是:

NullJh  Nullon
NullCn  Nullea

您的问题是新数组是用所有 null 字符串初始化的。那么您的代码 不是 为所有数组元素赋值,而只是为其中的一些元素赋值!

最后你打印你的数组,令人惊讶的是,那些 null 并且没有被改变的值仍然是 null(当你打印一个 null 字符串时......它打印 "null" [ 是的,null,而不是 Null;你的输出示例中有一个小错误]

你看,你从 0 迭代到 两个 数组的长度。如果数字是偶数,则将值放入 even[i];如果该值为奇数,则转到 odd[i]。让我们取 even - 在这种情况下,odd[i] 只是保持为空!

一种解决方法:

List<String> even = new ArrayList<>();
List<String> odd = new ArrayList<>();

而现在,不是在even/odd中设置某个索引;你只需要做:

even.add(some new value);

并添加这些单个字符:

even.add(new String(sCharArr));

这样做,偶数和奇数将(最终)包含您添加到每个列表的值;但没有 "residual" 空值。郑重声明:拆分字符串然后将它们拉回字符串数组的方式并不是解决问题的最 simple/straight 正向方法。

但我将 "further" 简化作为练习留给用户。