Java 检查字符串是否仅由具有匹配项的字母和/或连字符组成?

Java 检查字符串是否仅由具有匹配项的字母和/或连字符组成?,java,string,task,Java,String,Task,晚上好,科隆 在编程任务中,我必须检查给定字符串是否仅由字母和/或连字符组成。现在我有了一种匹配的方法。在对单词的测试中:“test”我的代码给了我false。应该是真的。你知道我的问题在哪里吗?我在比赛中误会了吗?我先谢谢你。美丽的夜晚 public class Zeichenketten { public static boolean istName(String a) { if (a.matches("[a-zA-Z]+") || a.matches(

晚上好,科隆

在编程任务中,我必须检查给定字符串是否仅由字母和/或连字符组成。现在我有了一种匹配的方法。在对单词的测试中:“test”我的代码给了我false。应该是真的。你知道我的问题在哪里吗?我在比赛中误会了吗?我先谢谢你。美丽的夜晚

    public class Zeichenketten {


    public static boolean istName(String a) {

        if (a.matches("[a-zA-Z]+") || a.matches("[-]+")) {
            return true;
        }

            else {
            return false;
            } 
        }
}

目前,您正在检查是所有字母还是所有连字符。您只需检查它是否匹配字母或连字符:

末尾的
-
表示“连字符”,而不是“范围的一部分”


注意if/else之外的简化-无论何时编写
if(condition)返回true;否则返回false
您应该只编写
返回条件为简单起见。

您的代码与测试字符串不匹配,因为只有当整个字符串按正则表达式模式匹配时,该方法才会返回true。在第一种情况下:
[a-zA-Z]+
您不匹配,因为字符串中有
-
符号;在第二种情况下,模式是
[-]+
您不匹配,因为字符串中有字母。

连字符的ASCII值为45,您知道字符串是一个字符数组。所以您有一个循环来检查给定字符串的每个字符,若它找到一个带有ASCI 45的字符,则返回true,否则返回false。

您使用了错误的条件。 您必须创建一个正则表达式并创建良好的模式

我推荐这个页面:用于测试在线正则表达式

请尝试以下示例:

   public static boolean istName(String a) {

        if (a.matches("[a-zA-Z-]+")) {
            return true;
        } else {
            return false;
        }
    }

@亚西莉亚:谢谢,修好了。不,那不行。“0123-1234”不包含“-”,但不应匹配。(也不必担心ASCII值是什么。)Moin Moin;-)代码不是用英文写的只是。。。看。。。奇怪的(顺便说一句,我是土生土长的)。谢谢你的评论@StefanHanke。但在我的大学里,练习是德语的s
   public static boolean istName(String a) {

        if (a.matches("[a-zA-Z-]+")) {
            return true;
        } else {
            return false;
        }
    }