2017-06-18 19 views
0

私はプログラムを稼働させようとしていましたが、実行されていましたが、すべての文字列に文字列配列の単語が含まれていると思われます。私は同じ列にビジネス名と人名が含まれているcsvファイルを試してみるためにopenCSVライブラリを使用しています。すべての会社名が2番目の列として表示され、すべての人名が表示されるようにしようとしています3番目の列。最初の列は単なる識別番号です。文字列に文字列配列の別の文字列が含まれているかどうかを正しく調べる方法は? - JAVA

for (String[] row : inputEntries) 
    { 
     for(int i = 0; i < dictionary.length; i++) 
     { 
      String rowEntry = row[1].toLowerCase(); 
      String dictionaryTerm = dictionary[i].toLowerCase(); 

      if(rowEntry.contains(dictionaryTerm)) 
      { 
       String entries = row[0] + "," + row[1] + "," + ""; 
       String[] output = entries.split(","); 
       writer.writeNext(output); 
       System.out.println(output + ": This contained a Dictionary word"); 
       break; 
      } 
      else if (i == dictionary.length) 
      { 
       String entries = row[0] + "," + "" + "," + row[1]; 
       String[] output = entries.split(","); 
       writer.writeNext(output); 
       System.out.println(output + ": This did not contain a Dictionary word"); 
       break; 
      } 
     } 
    } 

ことが意図された別のCSVに出力を行いますが、私がオリジナルと同じに見えるファイルを取得するように、すべてがビジネスの名前であることを考えているようです。このジレンマには、可能な解決策はありますか? contains関数を悪用していますか?

入力

"11111111","John Smith" 
"11111112","Wells Fargo Bank" 
"11111113","Company name LLC" 
"11111114","John Connor" 

出力

"11111111","","John Smith" 
"11111112","Wells Fargo Bank",""  
"11111113","Company name LLC",""  
"11111114","","John Connor" 

は、だから私はそれは私が望んで行うみかんために取得することができたが、問題はそれだけでチェックしているように見えるということです、それにはもう少し作業します辞書文字列の第1項のためのものである。

boolean match = false; 
    boolean nomatch = false; 
    int dicLength = dictionary.length; 

    for (String[] row : inputEntries) 
    { 
     for(int i = 0; i < dicLength; i++) 
     { 
      String rowEntry = row[1].toLowerCase(); 
      String dictionaryTerm = dictionary[i].toLowerCase(); 

      match = rowEntry.contains(dictionaryTerm); 

      if(match == true) 
      { 
       String entries = row[0] + "," + row[1] + "," + ""; 
       String[] output = entries.split(","); 
       writer.writeNext(output); 
       System.out.println(output + ": This contained a Dictionary word"); 
       match = false; 
       break; 
      } 

      if (i == (dicLength - 1)) 
      { 
       nomatch = true; 
      } 

      if (nomatch == true) 
      { 
       String entries = row[0] + "," + "" + "," + row[1]; 
       String[] output = entries.split(","); 
       writer.writeNext(output); 
       System.out.println(output + ": This did not contain a Dictionary word"); 
       match = false; 
       break; 
      } 
     } 
    } 
+0

申し訳ありませんが私はこのサイトで私の最初の質問ので、私はもっと多くの情報を追加する必要がある場合は質問してください。 – derpaderp

+0

いくつかのサンプル入力と期待される出力が役に立つでしょう – alejandrogiron

+0

私は入力と予想される出力を追加しました。 :D – derpaderp

答えて

0

更新されたコードを見ると、nomatch == trueをチェックするときに、誤ってnomatch = falseではなくmatch = falseを設定しています。この問題を解決する最良の方法は、以下に完全にそのコンパクトこれらの変数を排除することであろう(forループとして必要とされていない最後にまた、そのブレーククローズしようとしている):

int dicLength = dictionary.length; 

    for (String[] row : inputEntries) { 
     for(int i = 0; i < dicLength; i++) { 

      String rowEntry = row[1].toLowerCase(); 
      String dictionaryTerm = dictionary[i].toLowerCase(); 

      if(rowEntry.contains(dictionaryTerm)) { 
       String entries = row[0] + "," + row[1] + "," + ""; 
       String[] output = entries.split(","); 
       writer.writeNext(output); 
       System.out.println(output + ": This contained a Dictionary word"); 
       break; 
      } 

      if (i == (dicLength - 1)) { 
       String entries = row[0] + "," + "" + "," + row[1]; 
       String[] output = entries.split(","); 
       writer.writeNext(output); 
       System.out.println(output + ": This did not contain a Dictionary word"); 
      } 
     } 
    } 

あなたが作ることができますこれは、繰り返し実行するたびにdicの長さをチェックしない方が効率的です(ループ外に強制してください)が、それはあなた次第です! :)

+0

ありがとうございました!それはまさに私が必要としていたものです。それは私がそれが必要なものを正確にやっているようです。 – derpaderp

関連する問題