【问题标题】:Removing new lines/spaces from beginning and end of string Java从字符串 Java 的开头和结尾删除新行/空格
【发布时间】:2013-10-07 15:33:26
【问题描述】:

我有一个问题 - 我似乎无法从字符串的开头/结尾删除新的行/空格。我在正则表达式的开头和结尾使用\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 在新行上,每行之间没有跳过行):

用户:乔拉科夫

分支:头

更改的文件: DataObjectParser.java;1.94

修复了违约债券的消息

【问题讨论】:

    标签: java regex replace newline


    【解决方案1】:
    author.trim();
    

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

    author = author.trim();
    

    【讨论】:

    • 这样做了,结果是一样的,我猜添加新行的符号有些不同,.trim() 不会删除它们。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这样做了,结果是一样的,我猜添加新行的符号有些不同,.trim() 不会删除它们。
      【解决方案4】:

      如果你稍微改变一下你的正则表达式,我认为你最终可以完全删除.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*$", "");
      

      【讨论】:

      • 我只添加了.trim(),因为我没有其他想法了,我现在试试看会发生什么。
      • 很遗憾,Fixed the message for defaulted bonds 前后还是换了一行(也就是注释)。
      • @Schadenfreude 好的,我不太确定是什么问题,但我又添加了一个替换。在第一次替换后添加它。告诉我进展如何!
      • 成功了!为了安全起见,我可以在其他两种模式上使用相同的正则表达式吗?
      【解决方案5】:

      嘿尝试运行这个东西:

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

      【讨论】:

        猜你喜欢
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        • 2011-03-23
        • 1970-01-01
        • 2011-11-19
        相关资源
        最近更新 更多