我试图将一个句子分成单词,然后如果它们只包含字母字符则打印它们。其他字符应输出错误消息。
示例输入:
快速的棕色狐狸
结果输出:
在
快速
褐色
狐
示例输入:
Th1 qu1ck br0wn fox
期望输出:
这是无效的。
我试图用模式做到这一点,但我认为它没有用。
import java.util.Scanner;
import java.util.regex.Pattern;
public class test {
public static void main(String[] args) {
System.out.println("This will break a sentence into words.");
Scanner alpha = new Scanner(System.in);
String beta = alpha.nextLine();
String [] data = beta.split(" ");
if (Pattern.matches("[a-zA-Z]+", beta)){
System.out.println(data[0]);
System.out.println(data[1]);
System.out.println(data[2]);
System.out.println(data[3]);
}
else {
System.out.println("This is not valid.");
}
}
}
答案 0 :(得分:2)
答案很简单:)。 你试图将你的模式与整个inputString" beta"相匹配,但是你分裂了" beta"已经和你想要匹配的模式不是beta,而是匹配数组的一个元素" data"。
改变这个:
if (Pattern.matches("[a-zA-Z]+", beta)){}
到此:
for(String word : data)
{
Pattern.matches("[a-zA-Z]+", word)
}
你必须处理模式不匹配的情况,但这就是你的工作。 :) 我希望它有所帮助。
答案 1 :(得分:0)
请尝试以下代码:
String str = "This is a brown fox";
String patternStr= "[0-9]{1}";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(str);
if(matcher.find()){
System.out.println("invalid");
}else{
System.out.println("valid");
}
谢谢, JK
答案 2 :(得分:0)
试试这个:
System.out.println("This will break a sentence into words.");
Scanner alpha = new Scanner(System.in);
String beta = alpha.nextLine();
String [] data = beta.split("\\s+");
boolean valid = true;
for (String word: data)
if (!Pattern.matches("[a-zA-Z]+", word)){
valid = false
break;
}
if(valid)
System.out.println("This is valid.");
else
System.out.println("This is not valid.");
如果您的单词包含更多标准26个字母,则进行小调整
String beta = "Dieser Satz ist ungültig. This is valid";
String[] data = beta.split("[\\s+|\\.+]+");
boolean valid = true;
a: for (String word : data)
for (char c : word.toCharArray())
if (!Character.isAlphabetic(c)) {
valid = false;
break a;
}
if(valid)
for (String word : data)
System.out.println(word);
else
System.out.println("This is not valid.");
答案 3 :(得分:0)
在解析单词之前检查整行的另一个选项:
private static boolean isValidSymbols(String s) {
return s != null && s.matches("[a-zA-Z\\s]+");
}
private static void checkInput(String s) {
if (isValidSymbols(s)) {
for (String word : s.split("\\s+")) {
System.out.println(word);
}
} else {
System.out.println("This is not valid.");
}
}
public static void main(String[] args) {
checkInput("The quick brown fox");
checkInput("Th1 quick br0wn fox");
}
答案 4 :(得分:0)
如果我理解一个问题,那么简单的方法是用ASCII码检查字母:
public class Test {
public static void main(String[] args) {
System.out.println("This will break a sentence into words.");
Scanner alpha = new Scanner(System.in);
String beta = alpha.nextLine();
int count = 0;
for (int i=0; i<beta.length(); i++) {
if (((int)beta.charAt(i) > 64 && (int)beta.charAt(i) < 91) || ((int)beta.charAt(i) > 96 && (int)beta.charAt(i) < 123) || ((int)beta.charAt(i) == 32)) {
count++;
}
}
if (count == beta.length()) {
System.out.println("correct");
} else {
System.out.println("incorrect");
}
}
}