如何在Java中从复制粘贴的文本中删除新行字符(\n)?

如何在Java中从复制粘贴的文本中删除新行字符(\n)?,java,string,Java,String,我有一个代码,它替换了用户引入的一些字符空格、字符串制表符,然后显示文本: System.out.println("Text:"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); try { String text = bufferedReader.readLine(); text = text.replaceAll

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

    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) {
    }
但当我粘贴varios线条的文本时:

First Substring Introduced
Second Substring Introduced
Third Substring Introduced
它只显示第一个换行前的子字符串,如:

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

FirstSubstringIntroducedSecondSubstringIntroducedThirdSubstringIntroduced

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

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:


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

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:

你只读了一行,第一行:

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);
 }
第一个循环将打印FirstSubstringImported,第二个SubstringImported,依此类推,直到处理完所有行。

您只读取一行,第一行:

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);
 }
第一个循环将打印firstSubstringImported,第二个SubstringImported,依此类推,直到所有行都被处理。

注意StringreplaceAll需要一个正则表达式。Stringreplace将第一个参数的所有引用替换为所需的第二个参数

System.out.println(text.replace("\n", "").replace("\r", ""));
方法名称有点混乱。

请注意,StringreplaceAll需要一个正则表达式。Stringreplace将第一个参数的所有引用替换为所需的第二个参数

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());
    }
方法名称有点混乱

    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());
    }
我确实认为这是你需要的


我认为这正是您所需要的。

我喜欢第二种解决方案,即目前最好的解决方案。但是我怎样才能退出while状态呢?这似乎迫使我现在两次引入Enter,这导致在后续实现中出现一些失败。我不明白为什么您甚至要提供输入,因为您的示例代码没有暗示这一点。我喜欢第二个解决方案,目前最好的解决方案。但是我怎样才能退出while状态呢?似乎这迫使我现在两次引入Enter,并且在后续的实现中产生了一些失败。我不明白为什么您甚至会给出输入,因为您的示例代码并没有暗示这一点。System.out语句将在何时执行?@lsi When System.out.printlnstringBuilder.toString;invoke.System.out语句何时执行?@lsi When System.out.printlnstringBuilder.toString;援引