从字符串Java的开头和结尾删除新的行/空格

时间:2013-10-01 12:56:02

标签: java regex replace newline

我遇到了问题 - 我似乎无法从字符串的开头/结尾删除新的行/空格。我在正则表达式的开头和结尾使用\s,甚至在我得到字符串后使用.trim(),但无济于事。

public void extractInfo(String mydata) {

    // regex to extract the user name
    Pattern pattern = Pattern.compile("user:\\s*(.*)\\s+branch");
    Matcher matcher = pattern.matcher(mydata);
    // regex to extract the branch name
    Pattern pattern2 = Pattern.compile("branch:\\s*(.*)\\s+changed");
    Matcher matcher2 = pattern2.matcher(mydata);
    // regex to extract the comment and write it in a variable
    comment = mydata.replaceAll("(?s)\\s.*java;[0-9,.]+|.*java;NONE\\s", "");

    // put the author name in a variable
    matcher.find();
    author = matcher.group(1).toString();

    // put the branch name in a variable
    matcher2.find();
    branch = matcher2.group(1).toString();

    author.trim();
    comment.trim();
    branch.trim();
}

这是我用来提取信息的内容。

在使用StringBuilder附加提取的信息之后,这是我得到的输出(行保留):

git log --all -100 --before="2013-03-11" --branches=HEAD
--author="\(cholakov\)" --grep="^[#]*[0]*23922:[ ]*user:
  

修正了默认债券" --pretty="%H - %s ; %ad"

的消息

user:之后的新行是我尝试在cmd中执行时导致整个命令失败的原因,这就是我需要修复的内容。

这是我的输入(似乎无法保持格式化,DataObjectParser.java; 1.94在新行上,并且每行之间没有跳过行):

  

用户:cholakov

     

分支:HEAD

     

更改了文件:   DataObjectParser.java; 1.94

     

修正了违约债券的信息

5 个答案:

答案 0 :(得分:2)

author.trim();

是一个无操作,因为String是一个不可变类。使用

author = author.trim();

答案 1 :(得分:2)

调用author.trim RETURNS一个新的String,但它不会替换你调用它的那个。

答案 2 :(得分:2)

trim函数返回字符串的副本,省略前导和尾随空格。你应该这样做:

author  = author.trim();
comment = comment.trim();
branch  = branch.trim();

答案 3 :(得分:0)

嘿试着运行这个东西:

public class ReadFile {
 public static void main(String[] args) {
    String line = "\n     Java     ";
    System.out.println(line.trim());        
 }
}

答案 4 :(得分:0)

我认为如果你改变你的正则表达式,你最终可以完全删除.trim()

Pattern pattern = Pattern.compile("user:\\s*(.*?)\\s+branch");

Pattern pattern2 = Pattern.compile("branch:\\s*(.*?)\\s+changed");

comment = mydata.replaceAll("(?s)\\s*.*java;(?:[0-9,.]+|NONE)\\s*", "");

我在每个中调整了你的正则表达式;即将一些(.*)转换为(.*?),以便您可以删除所有尾随空格并简化您的替换注释。试着看看是否能解决你的问题^^

编辑:

尝试在评论中运行最后一次替换:

comment = comment.replaceAll("^\\s*|\\s*$", "");