字符串中的Java格式字

时间:2013-01-14 14:02:09

标签: java arraylist

例如,我有一个文本文件,其中包含书籍每一行的内容,我有一个java程序来搜索书中这些行中的特定单词。

这是该计划:

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;


public class AliceSearch {


    public static void main(String[] args) throws Exception {

        ArrayList<String> aiw = new ArrayList<String>();
        ArrayList<String> matches = new ArrayList<String>();
        Scanner scan = new Scanner(new File("aiw.txt"));
        Scanner input = new Scanner(System.in);

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

        String searchTerm;

        System.out.print("Please Input Search Parameter : ");

        searchTerm = input.nextLine();

        boolean itemFound = false;

        String currItem = null;

        for(int i = 0; i<aiw.size(); i++  ) {
            currItem = (String)aiw.get(i);

            if (currItem.contains(searchTerm)) {

                matches.add(currItem);

                itemFound = true;

            }
        }

        System.out.println("");

        if ( itemFound == false ) {

            System.out.println ( "No results containing "+searchTerm );

        }else{

            System.out.println ( "We Found the following results : " );

            for(int r = 0; r < matches.size(); r++){
                System.out.println("");
                System.out.println(matches.get(r));
            }
        }

        scan.close();
        input.close();

    }

}

我希望每个结果行中的searchTerm在输出时(或放在匹配的ArrayList中时)为大写。我怎么会这样呢?我知道你使用.toUpperCase();但我现在不知道如何用一串单词改变一个单词。

提前致谢!

3 个答案:

答案 0 :(得分:2)

而不是按照现在的方式输出它:

System.out.println(matches.get(r));

你不能使用

System.out.println(matches.get(r).replace(searchTerm, searchTerm.toUpperCase()));

以下是replace()方法的JavaDoc,用于将找到的单词替换为大写版本。

会更好
String uppercase = searchTerm.toUpperCase();

在循环之外然后使用

System.out.println(matches.get(r).replace(searchTerm, uppercase));

答案 1 :(得分:1)

String上有一个方法应该完全适合您的用例:

line.replace(word, word.toUpperCase());

答案 2 :(得分:0)

使用模式的替换功能可以轻松完成。我们当然还需要突出显示部分大写的单词(例如句子的开头),因此需要创建带有标志的模式,不能只使用String.replaceAll()

 Pattern highlight = Pattern.compile(
   Pattern.quote(word), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE );
 String hw = word.toUpperCase();
 line = highlight.matcher(line).replaceAll(hw);

一旦知道了这个词,就应该提前准备前两行。没有必要为每个找到的行重新计算它们。 Pattern.quote引用保留字符,因此它们没有特殊含义。