我正在寻找一些代码来读取单个单词上的最后两个字母和前两个字母,看看它们是否匹配。这些词总是大写的。这是我到目前为止的代码,我很沮丧为什么这不起作用!抱歉是n00b:)
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
String s;
char[] a;
int input=scan.nextInt();
scan.nextLine();
for(int i=0; i<input; i++){
a = scan.nextLine().toCharArray();
if((a[0] == a[a.length -1]) && (a[1] == a[a.length])){
System.out.println("MATCH");
}else{
System.out.println("DO NOT MATCH");
}
}
}
}
我做的第一件事就是FOR语句,如果你想知道它运行了多少次。
答案 0 :(得分:2)
尝试替换它:
if((a[0] == a[a.length -1]) && (a[1] == a[a.length])){
用这个:
if((a[0] == a[a.length - 2]) && (a[1] == a[a.length - 1])){
数组在Java中基于0,因此最后一个元素实际上是.length - 1
。 (长度为3的数组的有效索引为[0, 1, 2]
- 不是[1, 2, 3]
。)
编辑: 但是,因为Brian已经提高了赌注:我会提出一个更好的,不需要将String转换为字符数组 - 或者需要通过使用子串来创建任何新的字符串。
String str = scan.nextLine();
if((str.charAt(0) == str.charAt(str.length() - 2)) && (str.charAt(1) == str.charAt(str.length() - 1))){
此外,如果您的String少于2个字符会发生什么? (你可能想检查一下......)
答案 1 :(得分:1)
你几乎就在那里 - 你遗漏的一点就是数组的索引从零开始,所以数组中的 last 元素是[a.length-1],倒数第二个是一个[则为a.length-2]
答案 2 :(得分:1)
转换为char
数组实际上有点傻。
String line = scan.nextLine();
if (line.substring(0,2).equals(line.substring(line.length() - 2)))
{
// it matched ...
}
修改:您会注意到我正在使用上述两种形式的substring()
。第一个采用开始和结束索引,而第二个采用起始索引并延伸到源String
的末尾。请特别注意,两个参数版本的第二个参数是在所需子字符串之后的索引。
答案 3 :(得分:0)
对于类字符串,分别有一些名为startsWith-和endsWith的字符串布尔方法。