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()的循环中?当我在那里输入它时,它会给出“表达式的非法开始”错误,然后它会用“预期的类、接口或枚举”损坏其余代码