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は新しい行にあり、各行間でスキップされる行はありません):

ユーザー: チョラコフ

支店: 頭

変更されたファイル: DataObjectParser.java;1.94

デフォルトの債券に関するメッセージを修正

4

5 に答える 5

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 に答える