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

尝试这个

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 回答
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方法而不是equals. matches采用正则表达式,因此您可以将示例中的 if 表达式替换为:

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

是一个预定义的\s正则表达式匹配组,它将匹配任何空格,包括\n,并且*用于匹配其中的 0 个或更多。

于 2013-01-07T02:01:35.157 回答