我正在尝试获取字符串中索引为0的字符:
public static String editNoHP (String noHP){
String result;
try {
if(noHP.charAt(0) == '0')
result = "62"+noHP.substring(1);
else if(noHP.charAt(0) == '+' )
result = noHP.substring(1);
else if(noHP.charAt(0) == '6')
result = noHP;
else if(noHP.charAt(0) == '6' && noHP.charAt(1) == '2')
result = noHP;
else if(noHP.charAt(0) == '9')
result = noHP;
else
result = "62"+noHP;
}
catch (Exception e){
return "";
}
return result.replaceAll("[\\s\\-\\.\\^:,]","");
}
当我查询联系人后,我使用这个函数,但是我发现了奇怪的结果。
常规输入和输出:
input = +62 111-1111-1111 output : 6211111111111
input = 011111111111 output : 6211111111111
这是一个奇怪的输入和结果:
input = 011111111111 output : 62011111111111
我尝试调试这个问题,发现当应用程序尝试获取第一个字符时,返回的是'\u202A' 8234,而不是0。
我已经尝试了正则表达式,例如:
String clean = str.replaceAll("[^\\n\\r\\t\\p{Print}]", ""); or
String clean = str.replaceAll("[^\\x20-\\x7E]", ""); or
String clean = str.replaceAll("[^\u0000-\uFFFF]", ""); or
String clean = str.replaceAll("[^\\p{ASCII}]", ""); or
String clean = str.replaceAll("[^\x00-\x7F]", ""); or
String clean = StringEscapeUtils.unescapeJava(str);
所有的返回值都是相同的,为 '\u202A' 8234。这个字符是什么?如何解决这个问题?
更新: 我尝试编辑这个奇怪的联系人,发现了奇怪的行为。这个电话号码是 011111111111。首先,我将光标放在数字 0 和 1 之间,然后按下删除/退格键以删除 0。光标突然移动到数字 1 的右侧而不是左侧。然后,我保存联系人并运行我的程序。结果是 0,而不是 '\u202A' 8234。所以我认为这是因为号码格式不正常,可能是第一次添加这个联系人或者从谷歌账户同步时出现的问题。