2017-08-22 14 views
0

この情報の一部が知識が不足している場合は、Javaの学習を開始したばかりの場合は謝罪してください。line.containsを使用して正確な文字列を検索

この作業では、ユーザーは道路と町の両方を検索します。問題は、 'Cabramatta'のようなものを検索すると結果 'Cabramatta West'も結果に表示されるということです。

次のように読まれている情報の形式は次のとおりです。

ウィリアム・ストリート^ 3^3503 ^コリンズストリート^ Cabramatta西

^3^3503 ^コリンズストリート^ Cabramatta

while(fileName.hasNext()) 
    { 
     String line =fileName.nextLine(); 
     { 
     if(line.contains(suburbInput) && line.contains(roadInput)) 
      { 
       String tramDetails[] = line.split("\\^"); 
       String crossStreet = tramDetails[0]; 
       String stopNumber = tramDetails[1]; 
       int stopNumberInt = Integer.parseInt(stopNumber); 
       String trackerID = tramDetails[2]; 
       int trackerIDInt = Integer.parseInt(trackerID); 
       String roadName = tramDetails[3]; 
       String suburbName = tramDetails[4]; 

System.out.print("'Suburb': " + suburbName + " 'Road': " + roadName + " 'Cross Street': " + crossStreet + " 'Stop': " + stopNumberInt + " 'Tracker ID': " + trackerIDInt + "\n"); 
ウィリアム・ストリート

「Cabramatta」の検索結果を見つけるだけでなく、「Cabramatta West」の検索結果も検索するにはどうすればよいですか?

+0

変化(fileName.hasNextLineは())() –

+0

あなたは最初に分割して、配列内の該当エントリに比較することができます。 – Kraylog

答えて

0

チェックの前に入力を分割して、.containsの代わりに.equalsを使用する必要があります。あなたはnextLineを持つファイルからの読み込みをしているので、しばらく、しばらくする

while(fileName.hasNext()) 
{ 
    String line =fileName.nextLine(); 
    String tramDetails[] = line.split("\\^"); 
    String suburbName = tramDetails[4]; 
    String roadName = tramDetails[3]; 

    if(suburbName.equals(suburbInput) && roadName.equals(roadInput)) 
    { 

      String crossStreet = tramDetails[0]; 
      String stopNumber = tramDetails[1]; 
      int stopNumberInt = Integer.parseInt(stopNumber); 
      String trackerID = tramDetails[2]; 
      int trackerIDInt = Integer.parseInt(trackerID); 

      System.out.print("'Suburb': " + suburbName 
          + " 'Road': " + roadName 
          + " 'Cross Street': " + crossStreet 
          + " 'Stop': " + stopNumberInt 
          + " 'Tracker ID': " + trackerIDInt + "\n"); 
    } 
0

分割前にStringequalsメソッドを使用してください。ここではテストコードは次のとおりです。

 String line = "William Street^3^3503^Collins Street^Cabramatta West"; 
     String suburbInput = "Cabramatta"; 
     String roadInput = "Collins Street"; 

     String tramDetails[] = line.split("\\^"); 
     String crossStreet = tramDetails[0]; 
     String stopNumber = tramDetails[1]; 
     int stopNumberInt = Integer.parseInt(stopNumber); 
     String trackerID = tramDetails[2]; 
     int trackerIDInt = Integer.parseInt(trackerID); 
     String roadName = tramDetails[3]; 
     String suburbName = tramDetails[4]; 

     if (suburbInput.equals(suburbName) && roadInput.equals(roadName)) 
      System.out.print("'Suburb': " + suburbName + " 'Road': " + roadName + " 'Cross Street': " + crossStreet 
        + " 'Stop': " + stopNumberInt + " 'Tracker ID': " + trackerIDInt + "\n"); 

     suburbInput = "Cabramatta West"; 

     if (suburbInput.equals(suburbName) && roadInput.equals(roadName)) 
      System.out.print("'Suburb': " + suburbName + " 'Road': " + roadName + " 'Cross Street': " + crossStreet 
        + " 'Stop': " + stopNumberInt + " 'Tracker ID': " + trackerIDInt + "\n"); 

そして出力:

'Suburb': Cabramatta West 'Road': Collins Street 'Cross Street': William Street 'Stop': 3 'Tracker ID': 3503 

は、この情報がお役に立てば幸い!

0

あなたは可能性が郊外のためString#endsWith()の代わりString#contains()を使用しています。もちろん

if (line.endsWith(suburbInput) && line.contains(roadInput)) 

、これが唯一のバンドエイドです。 'Cabramatta'はまだ 'West Cabramatta'と一致します。if (...)ステートメントは実装されているため、と一致する可能性があります。と一致します。一致させる正確なフィールドにラインを解析し、それらのフィールドを明示的にテストする必要があります。

代わりに(sledge hammerアプローチ)、すべてを一度に正確に一致させる正規表現マッチャーを実装できます。

関連する問題