【问题标题】:Why do I have a null character in my output? [duplicate]为什么我的输出中有一个空字符? [复制]
【发布时间】:2019-03-17 01:51:54
【问题描述】:

所以,我尝试制作一个程序,该程序应该从用户那里获取字符串的输入并反转每个字符串,例如:stack -> kcats。我的程序几乎工作正常,除了在每个字符串的开头它也放置“null”!

import java.util.Scanner;
public class Q9 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a string.");
        String s = sc.nextLine();
        String[] w = s.split("\\s+");
        String[] r = new String[w.length];
        for (int i = 0; i < w.length; i++) {
            for (int j = w[i].length() - 1; j >= 0; j--) {
                r[i] += w[i].charAt(j);
            }
        }
        String t = String.join(" ", r);
        System.out.println(t);
    }
}

这是一个简单的问题,但我一生都无法弄清楚为什么会得到这个输出。

Enter a string.
stack
nullkcats

第一行是我的提示,第二行是我的输入,第三行是我收到的输出。谁能解释为什么会出现“null”以及我能做些什么来解决这个问题?

【问题讨论】:

  • 你为什么使用字符串数组?您正在使用单个字符串。
  • 我拆分了字符串,以便可以处理每个单独的单词。这对我来说似乎是最简单的方法。
  • (不是“空字符”。是4个字符'n''u''l''l'。)
  • @StephenC 你是对的!空字符在那里什么都没有。但这四个字符还是很烦人。

标签: java arrays string split


【解决方案1】:

这是因为 Java 中对象的默认值为 Null。这里,字符串数组索引值(即 r[i])最初为空。附加它的字符会导致带有字符输出的空值。

  • 尝试初始化默认值
  • 使用 Java 编辑器调试功能查看每个步骤的值。

【讨论】:

  • 对。每个 r[I] 都需要初始化为空 String,而不是 null。
  • 我在第一个循环的开头添加了一条语句 r[i] = "",现在它可以正常工作了。感谢您的提示!
猜你喜欢
  • 2017-01-13
  • 1970-01-01
  • 2022-11-18
  • 2021-03-13
  • 1970-01-01
  • 2013-04-09
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多