我正在尝试在字符串中的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
所以我尝试调试这个帐户,我发现当app尝试将字符设为0时,返回的是'\ u202A'8234,而不是0。
我已经尝试过RegEx:
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。所以我认为这是因为数字格式不正常,可能是第一次添加此联系人或从谷歌帐户同步时。
答案 0 :(得分:1)
根据http://unicode.org/cldr/utility/character.jsp?a=202A&B1=Show \u202A
是一种空白。
为了修复它,只需修剪弦。
public static String editNoHP (String noHP){
noHP = noHP.trim();
// the rest of your code...
}
答案 1 :(得分:1)
最后,我发现我可以使用正则表达式替换非字母数字字符。
所以这是我的结局功能:
public static String editNoHP (String noHPinput){
String result;
try {
noHPinput = noHPinput.trim();
String noHP = noHPinput;
noHP = noHP.replaceAll("[\\s\\-\\.\\^:,]","");
noHP = noHP.replaceAll("[^A-Za-z0-9]","");
char isinya = noHP.charAt(0);
if(isinya == '0')
result = "62"+noHP.substring(1);
else if(isinya == '+' )
result = noHP.substring(1);
else
result = noHP;
}
catch (Exception e){
return "";
}
return result;
}
此正则表达式删除字母数字字符旁边的所有unicode字符。