我遇到了问题 - 我似乎无法从字符串的开头/结尾删除新的行/空格。我在正则表达式的开头和结尾使用\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
修正了违约债券的信息
答案 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*$", "");