Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除每行开头的空格和每行末尾的空格_Java_Regex - Fatal编程技术网

Java 删除每行开头的空格和每行末尾的空格

Java 删除每行开头的空格和每行末尾的空格,java,regex,Java,Regex,我有这样一个字符串: Mr Moh Jo\n Address\n 33333 City\n\n Aland Islands String address = "Mr Moh Jo \n" + "Address \n" + " 33333 City \n" + "Aland Islands \n"; String [] addrLines = address.split("\n"); StringBuffer formatedAddress = new StringBuffer();

我有这样一个字符串:

Mr Moh Jo\n
Address\n
 33333 City\n\n
Aland Islands
String address = 
"Mr Moh Jo \n" + 
"Address \n" +
" 33333 City \n" +
"Aland Islands \n";

String [] addrLines = address.split("\n");
StringBuffer formatedAddress = new StringBuffer();

for(String line : addrLines)
{
    formatedAddress.append(line.trim()+ "\n");
}

System.out.println("formatedAddress: ");
System.out.println(formatedAddress.toString());
我想用下面的代码删除每行开头的空格和每行结尾的空格,但它不起作用

    public static String trimWhiteSpaceFromTheBeginingAndEndOFTheLine(
        String string) {
    Pattern trimmer = Pattern.compile("^\\s+|\\s+$");
    Matcher m = trimmer.matcher(string);
    StringBuffer out = new StringBuffer();
    while (m.find())
        m.appendReplacement(out, "");
    m.appendTail(out);

    return out.toString();
}
预期结果:

Mr Moh Jo\n
Address\n
33333 City\n\n
Aland Islands
试试这个:

 String s = "Your multi line string";
      System.out.println(s);

      String[] splitString = s.split("\n");
      s="";

      for(int i =0;i<splitString.length;i++)
      {
          splitString[i]  = splitString[i].trim();
          s+=splitString[i]+"\n";

      }
      System.out.println(s);
String s=“您的多行字符串”;
系统输出打印项次;
String[]splitString=s.split(“\n”);
s=“”;
对于(int i=0;i请尝试以下方法:

 String s = "Your multi line string";
      System.out.println(s);

      String[] splitString = s.split("\n");
      s="";

      for(int i =0;i<splitString.length;i++)
      {
          splitString[i]  = splitString[i].trim();
          s+=splitString[i]+"\n";

      }
      System.out.println(s);
String s=“您的多行字符串”;
系统输出打印项次;
String[]splitString=s.split(“\n”);
s=“”;

对于(inti=0;i为什么不使用,它正是你想要的

 String.trim()
你可以这样做:

Mr Moh Jo\n
Address\n
 33333 City\n\n
Aland Islands
String address = 
"Mr Moh Jo \n" + 
"Address \n" +
" 33333 City \n" +
"Aland Islands \n";

String [] addrLines = address.split("\n");
StringBuffer formatedAddress = new StringBuffer();

for(String line : addrLines)
{
    formatedAddress.append(line.trim()+ "\n");
}

System.out.println("formatedAddress: ");
System.out.println(formatedAddress.toString());

为什么不使用,它正是你想要的

 String.trim()
你可以这样做:

Mr Moh Jo\n
Address\n
 33333 City\n\n
Aland Islands
String address = 
"Mr Moh Jo \n" + 
"Address \n" +
" 33333 City \n" +
"Aland Islands \n";

String [] addrLines = address.split("\n");
StringBuffer formatedAddress = new StringBuffer();

for(String line : addrLines)
{
    formatedAddress.append(line.trim()+ "\n");
}

System.out.println("formatedAddress: ");
System.out.println(formatedAddress.toString());

您的输入是一个字符串。因此
trim()
仅省略开头和结尾的
空格,而不是中间的空格。因此,按
lineBreak
trim()
将字符串拆分为所有单独的值

       String[] inputArray = sample.split("\n");
       StringBuilder stringBuilder = new StringBuilder();
       for(String value : inputArray)
       {
           stringBuilder.append(value.trim());
           stringBuilder.append("\n");
       }
        System.out.println("Sample : "+stringBuilder.toString());

您的输入是一个字符串。因此
trim()
仅省略开头和结尾的
空格,而不是中间的空格。因此,按
lineBreak
trim()
将字符串拆分为所有单独的值

       String[] inputArray = sample.split("\n");
       StringBuilder stringBuilder = new StringBuilder();
       for(String value : inputArray)
       {
           stringBuilder.append(value.trim());
           stringBuilder.append("\n");
       }
        System.out.println("Sample : "+stringBuilder.toString());

只需在正则表达式中启用多行标志

Pattern.compile(“(?m)^[\\s&&[^\\n]]+\\\[\\s+&&&[^\\n]]+$”;

砰,完成了

您还可以使用
replaceAll
call替换所有匹配器代码:

public static String trimWhiteSpaceFromTheBeginingAndEndOFTheLine(
    String string) {
    return string.replaceAll("(?m)^[\\s&&[^\\n]]+|[\\s+&&[^\\n]]+$", "");
}

只需在正则表达式中启用多行标志

Pattern.compile(“(?m)^[\\s&&[^\\n]]+\\\[\\s+&&&[^\\n]]+$”;

砰,完成了

您还可以使用
replaceAll
call替换所有匹配器代码:

public static String trimWhiteSpaceFromTheBeginingAndEndOFTheLine(
    String string) {
    return string.replaceAll("(?m)^[\\s&&[^\\n]]+|[\\s+&&[^\\n]]+$", "");
}
像这样的

private void doTrim(String str) throws Exception {
    StringBuilder sb = new StringBuilder();
    BufferedReader reader = new BufferedReader(new StringReader(str));
    String line;
    String NL = System.getProperty("line.separator");
    while( (line=reader.readLine())!=null ) {
        sb.append(line.trim());
        sb.append(NL);
    }
    System.out.println(">>" + str + "<<");
    str = sb.toString().trim();
    System.out.println(">>" + str + "<<");
}
private void doTrim(字符串str)引发异常{
StringBuilder sb=新的StringBuilder();
BufferedReader reader=新BufferedReader(新StringReader(str));
弦线;
字符串NL=System.getProperty(“line.separator”);
而((line=reader.readLine())!=null){
sb.append(line.trim());
某人附加(NL);
}
System.out.println(“>>”+str+“+str+”类似这样的吗

private void doTrim(String str) throws Exception {
    StringBuilder sb = new StringBuilder();
    BufferedReader reader = new BufferedReader(new StringReader(str));
    String line;
    String NL = System.getProperty("line.separator");
    while( (line=reader.readLine())!=null ) {
        sb.append(line.trim());
        sb.append(NL);
    }
    System.out.println(">>" + str + "<<");
    str = sb.toString().trim();
    System.out.println(">>" + str + "<<");
}
private void doTrim(字符串str)引发异常{
StringBuilder sb=新的StringBuilder();
BufferedReader reader=新BufferedReader(新StringReader(str));
弦线;
字符串NL=System.getProperty(“line.separator”);
而((line=reader.readLine())!=null){
sb.append(line.trim());
某人附加(NL);
}

System.out.println(“>>”+str+“+str+”可能重复的可能重复的可能重复的:P的可能重复的可能重复的可能重复的:P
String.trim()
不修剪多行字符串中行开头的空格。1.
FormattedAddress.append(line.trim()+“\n”)
为什么要嵌套字符串连接并为每行分配新的StringBuffer?此行编译为
FormattedAddress.append(新StringBuilder(line.trim()).append(“\n”).toString())
2。StringBuffer是一个同步的(速度慢得多)StringBuilder的版本。除非您希望跨多个线程共享对象,否则不应使用stringbuffer。@UMad嗯……我本来打算使用stringbuffer,但后来我想我不确定是否需要同步此代码……所以我想我最好使用stringbuffer。为了解决第一点,我不知道它是如何解释的。这就是这就是java进行字符串连接的方式。您应该说:
formattedAddress.append(line.trim()).append('\n');
。如果stringbuilder是在方法内部创建的,并且从不离开该方法,则不需要同步代码,因为调用该方法的每个线程都使用单独的实例。
http://stackoverflow.com/questions/2721998/how-java-do-the-string-concatenation-using
以18票优势阅读答案(不是接受的有8个向上投票的字符串)。如果您有一个
StringBuilder
已使用append方法,而不是使用
+
String。trim()
不会从多行字符串的行开始修剪空白。1.
格式化地址.append(line.trim()+“\n”)
为什么要嵌套字符串连接并为每行分配新的StringBuffer?此行编译为
FormattedAddress.append(新StringBuilder(line.trim()).append(“\n”).toString())
2。StringBuffer是一个同步的(速度慢得多)StringBuilder的版本。除非您希望跨多个线程共享对象,否则不应使用stringbuffer。@UMad嗯……我本来打算使用stringbuffer,但后来我想我不确定是否需要同步此代码……所以我想我最好使用stringbuffer。为了解决第一点,我不知道它是如何解释的。这就是这就是java进行字符串连接的方式。您应该说:
formattedAddress.append(line.trim()).append('\n');
。如果stringbuilder是在方法内部创建的,并且从不离开该方法,则不需要同步代码,因为调用该方法的每个线程都使用单独的实例。
http://stackoverflow.com/questions/2721998/how-java-do-the-string-concatenation-using
以18票优势阅读答案如果你有一个
StringBuilder
已经使用append方法而不是
+
trim()
有一个非常奇怪的空白概念,只考虑c≤ U+0020.
trim()
有一个相当奇怪的概念,即只考虑c的空格≤ U+0020。代码修剪换行符例如,如果城市和阿兰岛之间有两条换行符,那么两条空行是修剪的,这不是我想要的。只修剪空格不是\n\n或\nHm,它与一个
\n
一起工作,但是
\n\n
会打断它。似乎是java正则表达式的错误。哦,等等,\n也在\s中。@Molwiko修复了exppressions一些其他的正则表达式魔术也在代码trimo处进行,例如,如果有tw