例如,我有一个文本文件,其中包含书籍每一行的内容,我有一个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();
但我现在不知道如何用一串单词改变一个单词。
提前致谢!
答案 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引用保留字符,因此它们没有特殊含义。