如何在Java中仅修剪空白而不是\ n

时间:2019-05-30 06:34:31

标签: java

我有一个类似

的字符串

String str = " hello world\n "

当我调用str.trim()时, 它返回

"hello world"

但是,我需要这样的字符串

"hello world\n"

如何仅删除字符串中的前导空格和尾随空格?

5 个答案:

答案 0 :(得分:2)

尝试使用此功能,但将Character.isWhitespace替换为您自己的应跟踪为空白的实现

public static String trim(String s) {
     return ltrim(rtrim(s));
}

public static Boolean isWhitespace(char c) {
     return Character.isWhitespace(c);
}

public static String ltrim(String s) {
     int i = 0;
     while (i < s.length() && isWhitespace(s.charAt(i))) {
         i++;
     }
     return s.substring(i);
}

public static String rtrim(String s) {
    int i = s.length()-1;
    while (i >= 0 &&  isWhitespace(s.charAt(i))) {
        i--;
    }
    return s.substring(0,i+1);
}

答案 1 :(得分:0)

您可以将所有 \ n 字符替换为 \\ n。,然后对其进行修剪。修剪后,将'\\ n'替换为\ n

String str = " hello world\n ";
str=str.replace("\n", "\\n");          // replace '\n' with '\\n'

System.out.println(str);  

str=str.trim();                       // trim it
System.out.println(str);

str=str.replace("\\n", "\n");          // reverse it
System.out.println(str);

System.out.println("end");            // to see new line

输出:

 hello world

 hello world\n 
hello world\n
hello world

end

答案 2 :(得分:0)

这就是我要做的。

private static Pattern pat = Pattern.compile("[\t ]*(.*?)[\t ]*", Pattern.DOTALL);

public static String stripWhiteStuff(String str) {
    Matcher m = pat.matcher(str);
    return m.matches()? m.group(1) : str;
}

public static void main(String... args) {

    String str = "  Hello\n\t ";
    System.out.println(">" + stripWhiteStuff(str) + "<");
}

结果:

>Hello
<

答案 3 :(得分:0)

您可以使用带有该字符的正则表达式删除。

这是一个非常有效的代码。

String s = "  Hello world\n      ";
System.out.println(s);
System.out.println(s.replaceAll("(^ +)|( +$)", ""));

输出

  Hello world\n      
Hello world\n

答案 4 :(得分:-2)

您必须转义反斜杠,以便将其视为文字:

String str = " hello world\\n ";
System.out.println(str.trim());

输出

hello world\n