2

文字列から特定の文字列を削除しています。最初に、ファイルリーダーを介してテキストファイルを読み取っています。その後、ファイルの内容を文字列配列に保存し、文字列配列から特定の文字列を削除しています

私の入力テキストは次のとおりです。

    :VL
15
n
3 c

09:0.023
 15th:0.023
 1987:0.025
 1st:0.025
 2:0.013
 2.0:0.043
 2003:0.056
 2005:0.056
    Top Terms: 
    Weight : 
props 
 optional
:  Point:
    1.0:
 15th:0.068

今、私はこのテキストを読んで、次の文字列配列に格納しています: String [] Result

私のコード:

for(String t1: Result){
Pattern = Pattern.compile("\\b:[0-9]\\b");
                matcher = pattern.matcher(t1);
                if(matcher.find()){
                    System.out.println(t1);
}

そして私が得ている出力:

09:0.023
 15th:0.023
 1987:0.025
 1st:0.025
 2:0.013
 2.0:0.043
 2003:0.056
 2005:0.056
    Top Terms: 
    Weight : 
 15th:0.068

しかし、私はこの出力を望んでいません。私の出力は次のようになります:

09:0.023
 15th:0.023
 1987:0.025
 1st:0.025
 2:0.013
 2.0:0.043
 2003:0.056
 2005:0.056
 15th:0.068

この出力を得るために適用しなければならない正規表現について考えてください。

4

4 に答える 4

1

私はそれを疑う

2005:0.056
    Top Terms: 
    Weight :

実際には1行です...どういうわけか。

その正規表現は、1桁の「単語」がある行に(のみ)一致する必要があります。


私はあなたが実際にこれを知っていると思います(そしてあなたは「それについて言及するのを忘れた」).

これらを一致させたい場合:

 2005:0.056 
 15th:0.023
 1st:0.023
 2nd:0.023
 3rd:0.023

しかし、これらではありません:

 2005:0.056 Top Terms:  Weight :
 1.0:

match()次に、検索ではなく、より厳密な正規表現が必要です。例えば

pattern = Pattern.compile(
              "\\s*[0-9]+(st|nd|rd|th|(\\.[0-9]+))?:[0-9]+\\.[0-9]+\\s*");
for (String t1: Result) {
    matcher = pattern.matcher(t1);
    if (matcher.match()) {
        System.out.println(t1);
    }
}

しかし、この時点で、「有効な」行の実際の基準は何であるかを推測しています。

于 2013-08-20T06:45:47.990 に答える
0

私はこれを得た。この後、正規表現を使用してファイルから読み取った後、コンテンツを分割しています\\s+。データを文字列配列に格納していますString [] Result

同じコードを適用します:

String []result;
String returnValue:
                    file = new FileReader(filename);
            reader = new BufferedReader(file);
            String line = "";
            while ((line = reader.readLine()) != null) {
                returnValue += line + "\n";
            }
            result = returnValue.split("\\s+");
    for(String t1: result){
    Pattern = Pattern.compile("\\b:[0-9]\\b");
                    matcher = pattern.matcher(t1);
                    if(matcher.find()){
                        System.out.println(t1);
    }

そして、それは次のような出力を与えています:

09:0.023
 15th:0.023
 1987:0.025
 1st:0.025
 2:0.013
 2.0:0.043
 2003:0.056
 2005:0.056
 15th:0.068
于 2013-08-20T07:21:53.303 に答える
0
for(String t1: Result){
            Pattern p= Pattern.compile("\\b:[0-9]\\b");
                            Matcher m= p.matcher(t1);
                            if(m.find()){
                                System.out.println(t1);
            }

このコードはまったく問題なく動作します。

于 2013-08-20T06:53:33.973 に答える
0

これはあなたを助けるかもしれません。

 BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"));
    String str = null;
    while ((str = br.readLine()) != null) {
         if((str.contains(":"))){
             String[] arr=str.split(":");
               if(arr.length==2){                      
                       if(Pattern.compile("\\d").matcher(arr[1]).find()){
                           System.out.println(str);
                       }                       
               }
         }
    }

出力

09:0.023
 15th:0.023
 1987:0.025
 1st:0.025
 2:0.013
 2.0:0.043
 2003:0.056
 2005:0.056
 15th:0.068
于 2013-08-20T06:46:49.840 に答える