1

我有一个问题 - 我似乎无法从字符串的开头/结尾删除新的行/空格。我\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

分行负责人

更改的文件:DataObjectParser.java;1.94

修复了违约债券的消息

4

5 回答 5

2
author.trim();

是一个空操作,因为String它是一个不可变的类。采用

author = author.trim();
于 2013-10-01T12:58:48.120 回答
2

调用 author.trim 会返回一个新字符串,但它不会替换你调用它的那个。

于 2013-10-01T13:00:42.677 回答
2

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

author  = author.trim();
comment = comment.trim();
branch  = branch.trim();
于 2013-10-01T13:01:10.623 回答
0

嘿尝试运行这些东西:

public class ReadFile {
 public static void main(String[] args) {
    String line = "\n     Java     ";
    System.out.println(line.trim());        
 }
}
于 2013-10-01T13:24:02.160 回答
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*$", "");
于 2013-10-01T14:28:21.547 回答