如何检查字符串是否与java中的格式匹配?

如何检查字符串是否与java中的格式匹配?,java,string,format,Java,String,Format,这是我的代码,我从扫描器中得到两个字符串,我想检查这些位置是否有正确的大写字母和整数格式。我查看了.matches()方法,但没有完全了解如何使用此模式:A1-H8 这些字符串类似于E6、B4、F1、A8。。。模式为大写字母整数 干杯 如果您没有订购要求,则regex[A-H][1-8]-[A-H][1-8]可以提供帮助(作为Java字符串:“[A-H][1-8]-[A-H][1-8]”) 示例:A1-H8,H4-G7,C8-A1 您可以在此处进行测试:假设您只处理单个数字,并传入一个2个字符的

这是我的代码,我从扫描器中得到两个字符串,我想检查这些位置是否有正确的大写字母和整数格式。我查看了.matches()方法,但没有完全了解如何使用此模式:A1-H8

这些字符串类似于E6、B4、F1、A8。。。模式为大写字母整数


干杯

如果您没有订购要求,则regex
[A-H][1-8]-[A-H][1-8]
可以提供帮助(作为Java字符串:
“[A-H][1-8]-[A-H][1-8]”

示例:
A1-H8
H4-G7
C8-A1


您可以在此处进行测试:

假设您只处理单个数字,并传入一个2个字符的字符串进行测试(拆分后),如果字符串为s,则此表达式应执行以下操作:

public static String[] positionQuery(int dim, Scanner test_in) {
Scanner stdin = new Scanner(System.in);
        System.out.println("Provide origin and destination coordinates.");
        System.out.println("Enter two positions between A1-H8:");
        String s = stdin.nextLine();
        String coordinates [] = s.split(" ");
        String origin = coordinates[0];
        String dest = coordinates[1];
修订:正如Andreas在评论中指出的,当输入ψ1时,上面的计算结果为真(isUpperCase也没有用,因为Phi是大写的)

我不太喜欢下面的内容,但它避免了指出的问题:

(s.length()==2) && Character.isLetter(s.charAt(0)) && Character.isDigit(s.charAt(1))
我同意原始问题中的要求,并在评论中澄清,该字母为大写

修订2:修复不必要的丑陋。更好的是:

(s.length()==2) && ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(s.charAt(0))>-1) && Character.isDigit(s.charAt(1))

(s.length()==2)和&(s.charAt(0)>='A')&(s.charAt(0)导入java.util.Scanner

公共类模式检查{

(s.length()==2) && (s.charAt(0)>='A') && (s.charAt(0)<='Z')&& Character.isDigit(s.charAt(1))
publicstaticvoidmain(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
字符串s=scan.nextLine();
scan.close();
String regexpatern=“^[A-Z][0-9]$”;//根据您的需要更改模式
//要求
字符串sAr[]=s.split(“”);
对于(int i=0;i

}

您尝试过什么?您尝试过使用正则表达式吗?如果是,您尝试过使用什么正则表达式?如果您可以使用正则表达式,您尝试过使用简单的字符比较吗?简单的字符比较如何?我所能想到的就是将字符串origin和dest转换为字符数组,然后如果该数组的第一个元素是一个,则使用for循环{由dim条目确定的..字母}然后对第二个元素使用for loop,看看它是否是一个从1到dim的整数。但它似乎没有那么简单。所以我想知道是否有更简单的方法来检查模式!请参阅下面@jeremy kahan for ideasohh的答案!我现在明白了!它区分大小写吗?要正确格式,字母必须是大写。@KaleJoe-你为什么不研究一下呢?它正好有你想要的东西,@ScaryWombat的指针会让你得到你需要的东西。如果有人说b7,我可能会犯错误,把它转换成b7,而不是把它当作无效。而且不,它不区分大小写。@Andreas,很好。我会更新。你为什么要逃避
-
?你知道我们是否逃避
-
,这将导致错误的解决方案?根据规范,使用
-
来指定方括号中的范围(例如
[a-z]
)。但是规范没有说明
-
是否作为有效字符使用(例如
[(-]
),是否需要转义,尽管我见过它使用转义和不使用转义。因此,扩展关于
-
特殊的事实,我不确定是否在方括号外使用它是否需要转义。
-
破折号仅在具有特殊含义的地方才是特殊的,因此它不是特殊的:1)字符类外部。2)字符类开头的
[-abc]
。3)
[abc-]
在字符类末尾。4)
[a-c-e]
在一个范围之后(第一个
-
是范围定界符,第二个
-
不是,即匹配
abce-
,但不匹配
d
)。感谢@Andreas的进一步解释,我相应地更新了解决方案。虽然还不确定转义是否会导致错误的行为。转义不会导致错误的行为,但它是多余的,过度转义会使正则表达式对我们人类不合适,尤其是在Java字符串文本中将它们加倍时。
public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    String s = scan.nextLine();
    scan.close();
    String RegexPattern = "^[A-Z][0-9]$";// Change the pattern as per your
                                            // requirement
    String sAr[] = s.split("-");

    for (int i = 0; i < sAr.length; i++) {
        System.out.println(sAr[i].matches(RegexPattern));
    }
}