[英]regular expression and a word list Java
I have to ask the user for a certain pattern for the words that want to retrieve for example if the user enters 我必须向用户询问要检索的单词的特定模式,例如,如果用户输入
#5: means an English word of size 5 #5:表示大小为5的英语单词
#4=at: means an English word of length four and contains the substring at. #4 = at:表示长度为4的英语单词,并包含at的子字符串。 That includes chat, rate, .. 其中包括聊天,评分,..
#6-^^y: means an English word of length six and it ends with the substring of two vowels followed by the letter 'y' #6-^^ y:表示长度为6的英语单词,以两个元音的子串结尾,后跟字母“ y”
#5+*ro: means an English word of length five and it starts with the substring having a non- vowel letter followed by the substring 'ro'. #5 + * ro:表示长度为5的英语单词,其开头是带有非元音字母的子字符串,后跟子字符串“ ro”。 This includes broke, froze, wrote, .. 这包括破产,冻结,撰写,..
I handled the file part correctly but couldn't do the regular expression part 我正确处理了文件部分,但无法执行正则表达式部分
The is my code 这是我的代码
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
public class ReplaceApp {
public static void main (String args[])
{
ReplaceApp rf = new ReplaceApp();
Scanner in = new Scanner(System.in);
String pattern;
rf.openFile();
rf.readData();
System.out.println("Enter the pattern that you wish to retrieve words of");
System.out.println("If you want help type \"?\"");
pattern=in.nextLine();
if (pattern.equals("?"))
{
System.out.println("- The symbol * can only be replaced by a none vowel letter");
System.out.println("- The symbol ^ can only be replaced by a vowel letter");
System.out.println("- The symbol & can only be replaced by a vowel or none vowel letter");
System.out.println("- A special pattern that starts with # followed by an integer and can be followed by a positive, "
+ "negative or equal sign followed by a pattern as explained earlier means an English word of the length "
+ "specified after # and contains the described pattern as substring of it. The substring is at the "
+ "beginning of the word if the sign is positive, at the end of the word if the sign is negative, and "
+ "anywhere if the sign is equals.");
}
if (pattern.startsWith("*"))
{
System.out.println(rf.retrieveWords("^[b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z]"));
}
if (pattern.startsWith("^"))
{
System.out.println(rf.retrieveWords("^[aeuio]"));
}
}
Scanner input;
ArrayList<String> wordList=new ArrayList<String>();;
public void openFile() {
try {
input = new Scanner(new File("words.txt"));
} // end try
catch (FileNotFoundException fileNotFoundException) {
System.out.println("Error opening file.");
} // end catch
} // end method openFile
public void readData() {
// read records from file using Scanner object
while (input.hasNext()) {
wordList.add(input.nextLine());
} // end while
input.close();
} // end method readRecords
public Object[] retrieveWords(String re)
{
ArrayList<String> wordsToFind=new ArrayList<String>();
for(String word:wordList){
if(word.matches(re))
wordsToFind.add(word);
}
return wordsToFind.toArray();
}
}
Here is some of the regex patterns 这是一些正则表达式模式
#5: means an English word of size 5
\\b\\w{5}\\b
#4=at: means an English word of length four and contains
the substring at. That includes chat, rate, ..
\\bat\\w{2}\\b|\\b\\wat\\w\\b|\\b\\w{2}at\\b
#6-^^y: means an English word of length six and it ends with
the substring of two vowels followed by the letter ‘y’
\\b\\w{3}[aeiou]{2}y\\b
#5+*ro: means an English word of length five and it starts with
the substring having a non- vowel letter followed by the substring ‘ro’.
This includes broke, froze, wrote, ..
\\b[^aeiou]ro\\w{2}\\b
Pattern explanation 模式说明
\b A word boundary
\w A word character: [a-zA-Z_0-9]
X{n} X, exactly n times
[abc] a, b, or c (simple class)
[^abc] Any character except a, b, or c (negation)
Study Java Regex Pattern for detained explanation of each pattern. 学习Java Regex模式以获取每种模式的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.