到目前为止,我正在制作一个小程序,比较两个字符串的结果是真是假。然而,如果程序在视觉上看起来是一样的,那么它需要说true。例如,如果它说box和b0x,那么它就是真的。到目前为止,结果看起来是错误的,如下所示。
Enter First String:
box
Enter Second String:
b0x
false
下面的字符串需要被认为是相同的
0, o and Q
1, I and T
2 and Z
5 and S
8 and B
下面是我目前的工作
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter First String:");
String str1 = sc.nextLine();
System.out.println("Enter Second String:");
String str2 = sc.nextLine();
sc.close();
String string1 = new String("0");
String string2 = new String("o");
String string3 = new String("q");
String string4 = new String("1");
String string5 = new String("l");
String string6 = new String("T");
String string7 = new String("2");
String string8 = new String("z");
String string9 = new String("5");
String string10 = new String("s");
String string11 = new String("8");
String string12 = new String("b");
// Comparing for String 3 = String 4
if (str1.equals(str2))
{
System.out.print(true);
}
else if(string1.equals(str1))
{
System.out.print(true);
}
else if(string2.equals(str2))
{
System.out.print(true);
}
else
{
System.out.print(false);
}
}
}
}
是否有任何算法,我可以使用或任何方式,程序可以检测为真,即使他们在视觉上是相同的。谢谢你的帮助,谢谢
3条答案
按热度按时间xbp102n01#
另一种选择是构建一个在相似值之间具有公共标识符的Map。可能有点复杂,但应该比循环
replaceAll
多次将两个值标准化。olqngx592#
首先,在声明字符串变量时,不必每次都进行构造函数调用。
然后,我建议您创建一个集合,其中包含所有应该看起来相同的角色。
迭代第一个输入的所有字符,并检查是否:
第一个输入的每个字符等于第二个输入的每个字符
如果是“视觉上看同一个字符”,请检查第二个输入是否包含关联的字符。
根据您提供的数据,我建议您使用此解决方案,尽管它不是完美的:
}
一些输出:
我想那就行了。如果有任何问题,请毫不犹豫地在调试模式下执行它。我快速编码了这个,可能会出错。
但总的来说,我建议你:使用正则表达式。这是由另一个答案提出的,我认为这只能比这个更好。然而,正则表达式可能很难理解。。。
btqmn9zl3#
这个问题(以及大多数关于字符串模式匹配的问题)的答案是正则表达式。您只需对所有字符转换使用replaceall来规范化字符串。
比如: