从句子中划出一个单词

时间:2013-01-07 01:21:31

标签: java

我需要它做的是将每行中搜索到的单词大写,所以我已经有了

    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 个答案:

答案 0 :(得分: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));
   }
}

虽然您知道需要大写的单词,但为什么要从文件中获取字符串并将其大写。

答案 1 :(得分:0)

Herr是一种在字符串中大写单词的方法:

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));

答案 2 :(得分: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));
        }
    }

答案 3 :(得分: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或更多。