我有一个代码,它替换了用户引入的字符串的一些字符(空格,制表符(,然后显示文本:
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());
}
我确实认为这是你需要的。