1

私がする必要があるのは、各行から検索された単語を大文字にすることです。

    File myFile = new File("AliceInWonderland.txt");
    Scanner scan = new Scanner(myFile);
    Scanner uInput = new Scanner(System.in);
    String word;
    int count = 0;

    ArrayList<String> Alice = new ArrayList<String>();

        System.out.println("Select the word that you would like to search for, from the book of alice and wonderland: ");
        word = uInput.next();


    while(scan.hasNext()){
        Alice.add(scan.nextLine());
    }

    for(int i = 0;i <= Alice.size();i++){
        if(Alice.get(i).contains(word)){
            System.out.println(Alice.get(i));
            count++;
        }
        else{
            System.out.println(Alice.get(i));
        }
    }` 

私は書くことSystem.out.println(Alice.get(i).ToUpper);ができましたが、これは検索された単語を含むすべての行を大文字にし、私がしたいのは検索された単語を強調表示することだけです

4

4 に答える 4

0

次のようにforループを変更します

for(int i = 0;i <= Alice.size();i++)          
{             
  if(Alice.get(i).contains(word))
  {
     System.out.println(word.toupperCase());

     count++;
  }
  else
 {
      System.out.println(Alice.get(i));
   }
}

大文字にする必要がある単語はわかっていますが、なぜファイルから文字列を取得して大文字にする必要があるのでしょうか。

于 2013-01-07T01:26:46.347 に答える
0

文字列内の単語を大文字にする方法は次のとおりです。

private static String capWord(String s, String w) {
    int k = s.indexOf(w);
    if (k < 0)
        return s;
    return s.substring(0, k) + w.toUpper() + s.substring(k + w.length());
}

ここで使用します:

System.out.println(capWord(Alice.get(i), word));
于 2013-01-07T01:28:01.557 に答える
0

まず、読み取りループを次のように変更する必要があります。

while(scan.hasNext()){
    Alice.add(scan.next());
}

next代わりに使用するnextLineと、次の行ではなく、次の単語が読み取られます。

ただし、改行を保持したい場合は、次のこともできます。

while(scan.hasNextLine()){
    line = scan.nextLine();

    for (String w : line.split(" "))
        Alice.add(w);
}

単語を検索するときに、このメソッドを使用しequalsて正確な単語を検索したりequalsIgnoreCase、単語の大文字と小文字を無視したりすることができます。でどのように見えるかは次のequalsとおりです。

for(String w : Alice){
    if(w.equals(word)) {
        System.out.print(w.toUpperCase());
        count++;        
    } else
        System.out.print(w);

また、中間のリストを避けて、読みながらその行で作業することもできます。このようなもの:

while(scan.hasNextLine()){
    line = scan.nextLine();

    for (String w : line.split(" "))
        if(w.equals(word)) {
            System.out.print(w.toUpperCase());
            count++;        
        } else
            System.out.print(w);
}

編集:行の最後の単語が探している単語である可能性があることを考慮していませんでした。その場合、 は最後の単語であるため、改行 ("\n") が含まれるため、 には一致しませんw.equals(word)。この問題に取り組むために、 のmatches代わりに メソッドを使用できますequalsmatchesは正規表現を取るため、次の例の if 式を置き換えることができます。

if (w.matches(word + "\s*")){
    ...
}

\s、 を含む任意の空白に一致する事前定義された正規表現一致グループで\nあり、*は、これの 0 個以上に一致するためのものです。

于 2013-01-07T02:01:35.157 に答える
0

これを試して

int wordLength = word.length();
    for(int i = 0;i < Alice.size();i++){
        if(Alice.get(i).contains(word)){
            for(int c=0;c<Alice.get(i).length()-wordLength;c++){
                if(Alice.get(i).substring(c, c+wordLength).equals(word)){
                    System.out.print(Alice.get(i).substring(0, c));
                    System.out.print(Alice.get(i).substring(c, c+wordLength).toUpperCase());
                    System.out.print(Alice.get(i).substring(c+wordLength, Alice.get(i).length()) + "\n");
                }
            }
            count++;
        }
        else{
            System.out.println(Alice.get(i));
        }
    }
于 2013-01-07T01:51:40.980 に答える