如何在 Java 中从复制粘贴的文本中删除换行符 ()



我有一个代码,它替换了用户引入的字符串的一些字符(空格,制表符(,然后显示文本:

    System.out.println("Text:");
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    try {
        String text = bufferedReader.readLine();
        text = text.replaceAll("n", "");
        text = text.replaceAll(" ", "");
        text = text.replaceAll("t", "");
        System.out.println(text);
    } catch (IOException e) {
    }

但是当我粘贴变奏行的文本时:

First Substring Introduced
Second Substring Introduced
Third Substring Introduced

它只显示第一个换行符之前的子字符串,如下所示:

firstSubtringIntroduced

我想获得整个粘贴文本的下一个结果:

FirstSubstringIntroducedSecondSubstringIntroducedThirdSubstringIntroduced

只读了一行,第一行:

String text = bufferedReader.readLine();  //just one line

这就是为什么你得到的输出只显示处理的第一行。您应该创建一个循环以读取您输入的所有行:

 while((text=bufferedReader.readLine())!=null)
 {
    text = text.replaceAll("n", "");
    text = text.replaceAll(" ", "");
    text = text.replaceAll("t", "");
    System.out.print(text);
 }

第一个循环将打印 FirstSubtringIntroduction、第二个 SecondSubstringIntroduction,依此类推,直到处理完所有行。

从每行中删除制表符和空格后,尝试将所有行聚合在一起:

StringBuilder sb = new StringBuilder();
String text = "";
try {
    while ((text = br.readLine()) != null) {
        text = text.replaceAll("[t ]", "");
        sb.append(text);
    }
}
catch (IOException e) {
}
System.out.println(sb);

这里的问题是您的BufferedReader一次读取一行。

作为替代方案,更接近您当前的解决方案,您可以只使用 System.out.print ,它不会自动打印换行符,而不是System.out.println

try {
    while ((text = br.readLine()) != null) {
        text = text.replaceAll("[t ]", "");
        System.out.print(text);
    }
}
catch (IOException e) {
}

请注意,String#replaceAll需要一个正则表达式。 String#replace 将第一个参数的所有匹配项替换为第二个参数(这是您想要的(。

System.out.println(text.replace("n", "").replace("r", ""));

方法名称有点令人困惑。

    public static void main(String args[]) {
        System.out.println("Text:");
        StringBuilder stringBuilder = new StringBuilder();
        try (InputStreamReader inputStreamReader = new InputStreamReader(System.in);
             BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
             Scanner scanner = new Scanner(bufferedReader);
        ) {
            while (scanner.hasNext()) {
                stringBuilder.append(scanner.next());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(stringBuilder.toString());
    }

我确实认为这是你需要的。

最新更新