2012-02-14 5 views
2

私の基本的な問題は次のとおりです。ファイルからいくつかの行を読み込んでいます。ファイルの各行の形式はこれです:文字列内の2つの単語を検索するための正規表現

John Doe 123 

Doe123間のタブがあります。

John Doeを「取り除く」ような正規表現を探しています。 scanner.next(regular expression)のようなものは、私にJohn Doeを与えるでしょう。

これはおそらく非常に簡単ですが、動作させることはできません。また、私はそこにあるタブに頼ることなくこれを理解しようとしています。

私はここで見ました:Regular Expression regex to validate input: Two words with a space between。しかし、これらの答えのどれも働かなかった。私はランタイムエラーが発生し続けた。

いくつかのコード:

while(inFile.hasNextLine()){ 
    String s = inFile.nextLine(); 
    Scanner string = new Scanner(s); 
    System.out.println(s); // check to make sure I got the string 
    System.out.println(string.next("[A-Za-z]+ [A-Za-z]+")); //This 
               //doesn't work for me 
    System.out.println(string.next("\\b[A-Za-z ]+\\b"));//Nor does 
                   //this 
} 
+0

私たちが作業できるコードはありますか? –

+0

(John)。+(Doe) - http://docs.oracle.com/javase/tutorial/essential/regex/index.html –

+0

「[区切りを使用して区切り文字「\ t」でJavaでの文字列解析]の可能な複製(http://stackoverflow.com/questions/1635764/string-parsing-in-java-with-delimeter-tab-t-using-split) –

答えて

2

は、あなたがこのために正規表現を使用する必要がありますか?それぞれの行でsplitメソッドを\tに渡して、最初の要素または2番目の要素を取得するだけです(私はあなたが「拾う」ことを意味するかどうかわかりません)。

+0

正規表現が本当に必要ないsplit()を提案する+1。 – anubhava

+0

うん、それは必要です。 – user678392

0

実行時エラーが発生しているコードを提供していれば役に立ちます。あなたは常にあなたの名前は二つの単語であることを分かっていた場合

[A-Za-z]+ [A-Za-z]+ 

あなたは正規表現を使用することができます。

また、(つまり、「\ B」があるものだ)してください、それは単語全体をキャプチャすること、言葉(アルファベットを含む)の任意の数と一致する

\b[A-Za-z ]+\b 

を試みることができる - ジョン・ドウ」返すように> "" John Doe "の代わりに(末尾のスペースも)。バックスラッシュをJavaでエスケープする必要があることを忘れないでください。

+0

だから私はこれらの仕事のいずれかを得ることができませんでした。最初のものは例外をスローし、2番目のものは1番目または2番目の単語のみを取得します(私はどちらが覚えていないか)。 – user678392

0

これは基本的に残りの部分からジョン・ドウを隔離するために働く...

public String isolateAndTrim(String candidate) { 
    // This pattern isolates "John Doe" as a group... 
    Pattern pattern = Pattern.compile("(\\w+\\s+\\w+)\\s+\\d*"); 
    Matcher matcher = pattern.matcher(candidate); 
    String clean = ""; 
    if (matcher.matches()) { 
     clean = matcher.group(1); 
     // This replace all reduces away extraneous whitespace... 
     clean = clean.replaceAll("\\s+", " "); 
    } 
    return clean; 
} 

グループ化括弧を使用すると、桁部から名前部分を「狙い撃ち」することができます。 "John Doe"、 "Jane Austin"、何でも。 RegExのグループ分けは、このような問題に最適です。余分な空白を削除する

トリックは、あなたが、シンプルさと読みやすさを好むかHow to remove duplicate white spaces in string using Java?

0

から来ていますか?その場合は、次の解決策を検討してください。

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class MyLineScanner 
{ 

    public static void readLine(String source_file) throws FileNotFoundException 
    { 
     File source = new File(source_file); 
     Scanner line_scanner = new Scanner(source); 

     while(line_scanner.hasNextLine()) 
     { 
      String line = line_scanner.nextLine(); 

      // check to make sure line is exists; 
      System.out.println(line); 

      // this work for me    
      Scanner words_scanner = new Scanner(line); 
      words_scanner.useDelimiter("\t");   

      while (words_scanner.hasNext()) 
      { 
       System.out.format("word : %s %n", words_scanner.next()); 
      } 
     } 

    } 



    public static void main(String[] args) throws FileNotFoundException 
    { 
     readLine("source.txt"); 

    } 

} 
関連する問題