所以我有这个代码,它接受一个名字数组并按字母顺序对它们进行排序。我想知道如何检查输入的名称是否是单词(即它的字符是字母,而不是数字或标点符号等)。如果没有打印出来的"输入的名称是不正确的重新运行代码"感谢先进的帮助!
import java.util.Scanner;
public class Alphabetical_Order
{
public static void main(String[] args)
{
int n;
String temp;
Scanner s = new Scanner(System.in);
System.out.print("Enter number of names you want to enter:");
n = s.nextInt();
String names[] = new String[n];
Scanner s1 = new Scanner(System.in);
System.out.println("Enter all the names:");
for(int i = 0; i < n; i++)
{
names[i] = s1.nextLine();
}
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (names[i].compareTo(names[j])>0)
{
temp = names[i];
names[i] = names[j];
names[j] = temp;
}
}
}
System.out.print("Sorted Order:");
for (int i = 0; i < n - 1; i++)
{
System.out.print(names[i] + ",");
}
System.out.print(names[n - 1]);
}
}
答案 0 :(得分:2)
根据您对“字母”的定义,以下之一将执行:
private static boolean isAllEnglishLetters(String text) {
return text.matches("[a-zA-Z]+");
}
private static boolean isAllEnglishLetters(String text) {
return text.matches("\\p{Alpha}+"); // An alphabetic character: [a-zA-Z]
}
private static boolean isAllUnicodeLetters(String text) {
return text.matches("\\p{L}+"); // A unicode letter category
}
<强> TEST 强>
public static void main(String[] args) {
System.out.printf("%17s %s%n", "English", "Unicode");
test("John");
test("JohnDoe");
test("Schäfer");
test("John2");
test("John.Doe");
test("John Doe");
}
private static void test(String text) {
System.out.printf("%-10s %-5s %-5s%n", text, isAllEnglishLetters(text),
isAllUnicodeLetters(text));
}
<强>输出强>
English Unicode
John true true
JohnDoe true true
Schäfer false true <-- Notice this
John2 false false
John.Doe false false
John Doe false false
<强>更新强>
上面的代码显示了一个可重用的方法,可以在需要时简单地调用它。您当然可以直接进行matches()
电话,例如
for(int i = 0; i < n; i++)
{
names[i] = s1.nextLine();
if (! names[i].matches("\\p{L}+"))
{
System.out.println("name entered is incorrect re run code");
return; // exit program
}
}
答案 1 :(得分:0)
一个选项是用所有内容替换所有非单词字符,并检查结果字符串的长度是否仍然相同。这是一个完成此任务的单行方法:
private static boolean isAllEnglishLetters(String text) {
return name.replaceAll("[^a-zA-Z]", "").length() == name.length();
}