【发布时间】:2020-06-20 07:03:42
【问题描述】:
我正在尝试为符合以下条件的字符串字谜创建一个程序:
- 方法应该只允许在字谜中使用字母、空格、逗号和点。如果还有其他字符,则字符串不能包含字谜。
- 该方法在检查文本时应忽略所有空格、逗号和点。
- 如果文本中没有字母,则文本不能是字谜。
import java.util.Arrays;
import java.util.Scanner;
public class StringAnagram {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter first string: ");
String first = in.nextLine().toUpperCase();
System.out.print("Enter second string: ");
String second = in.nextLine().toUpperCase();
String result = isAnagram(first, second);
System.out.println(result);
}
private static String isAnagram(String first, String second) {
String answer = "";
if (first.matches("[A-Z\\.\\,\\s]")) {
String st = first.replaceAll("\\.\\,\\s", "");
String nd = second.replaceAll("\\.\\,\\s", "");
char[] arraySt = st.toCharArray();
char[] arrayNd = nd.toCharArray();
Arrays.sort(arraySt);
Arrays.sort(arrayNd);
if(Arrays.equals(arraySt, arrayNd)) {
answer = "Anagram.";
}
else {
answer = "No anagram.";
}
}
else {
answer = "No anagram.";
}
return answer;
}
}
但是当程序测试这两个句子时,它们不是字谜,但它们应该是字谜。我不知道在哪里寻找错误。
- 十一加二等于十三。
- 十二加一等于十三。
【问题讨论】:
-
如下所述,您的String.replaceAll 调用存在错误,但我想指出,如果您在比较之前执行此操作以检查超出范围的字符,则检查会变得更加简单