Java 进行排序还检查输入的名称是否为单词(即,其字符为字母而非数字或标点符号等)
我有一段代码,它接受一个名称数组并按字母顺序排序。我想知道如何让它检查输入的名称是否是单词(即,它的字符是字母而不是数字或标点符号等)。如果没有打印出来,比如“输入的名称不正确,请重新运行代码”,感谢您在高级中的帮助Java 进行排序还检查输入的名称是否为单词(即,其字符为字母而非数字或标点符号等),java,arrays,string,loops,sorting,Java,Arrays,String,Loops,Sorting,我有一段代码,它接受一个名称数组并按字母顺序排序。我想知道如何让它检查输入的名称是否是单词(即,它的字符是字母而不是数字或标点符号等)。如果没有打印出来,比如“输入的名称不正确,请重新运行代码”,感谢您在高级中的帮助 import java.util.Scanner; public class Alphabetical_Order { public static void main(String[] args) { int n; St
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]);
}
}
import java.util.Scanner;
公共类字母顺序
{
公共静态void main(字符串[]args)
{
int n;
字符串温度;
扫描仪s=新的扫描仪(System.in);
System.out.print(“输入要输入的名称数:”);
n=s.nextInt();
字符串名称[]=新字符串[n];
扫描仪s1=新的扫描仪(System.in);
System.out.println(“输入所有名称:”);
对于(int i=0;i0
{
temp=名称[i];
名称[i]=名称[j];
名称[j]=临时;
}
}
}
系统输出打印(“排序顺序:”);
对于(int i=0;i
一个选项是用零替换所有非单词字符,并检查结果字符串的长度是否仍然相同。下面是一个单行方法,可以实现这一点:
private static boolean isAllEnglishLetters(String text) {
return name.replaceAll("[^a-zA-Z]", "").length() == name.length();
}
根据您对“字母”的定义,以下其中一项可以:
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
}
测试
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));
}
输出
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));
}
英语Unicode
约翰是真的
真的
Schäfer false true感谢您的帮助name.replaceAll(“\\w”,“”)
返回一个空字符串,因为您刚刚删除了所有a-zA-Z_0-9
字符。@Andreas请删除您的否决票。你不明白我做了什么。@TimBiegeleisen我明白,如果你使用“isName”
运行,它也会打印这不是一个名称。
。你是对的。。。我应该使用\W
而不是\W
@CameronBown,无论你想在哪里进行测试。在调用nextLine()
maybe()的循环中?当我在那里输入它时,它会给出“表达式的非法开始”错误,然后它会用“预期的类、接口或枚举”损坏其余代码