我正在读取制表符分隔的文本文件(从excel导出)到我的java应用程序中,但该文件可能包含我不想要的无效字符。例如,在电子表格中,我看到这些字符出现(我不生成电子表格):
�
当制表符分隔时显示为:
�
这显然是Unicode字符'REPLACEMENT CHARACTER'。如何在我的Java字符串中检测到这个字符,以便我可以中止导入?
String invalidString = "1234 � test2"
答案 0 :(得分:1)
此问题的答案取决于您理解为无效字符的内容。
一个简单的检查是检查代码点是否在某个范围内。最低的可打印字符是空格。它的十进制值为32.最高ASCII字符为~
,十进制值为126.这会将其截断为可打印的ASCII字符范围,这对使用重音符号或类似字符的人来说是不利的。 / p>
另一种方法是检查某个字符是否可以打印某个字体。您可以使用java.awt.Font
类。它提供了一个方法canDisplay
,如果字体有一个字形来显示该字符,则返回该方法。这可能会奏效,但感觉非常糟糕。但是这个可以成为你想要的,我们无法知道。
另一个标准可能是该字母是有效的字母或数字。 java.lang.Character
类提供方法isLetter
和isDigit
来确定这一点。
我们都知道TANSTAPT,所以你可能使用了错误的字符集。找出你是否使用与Excel相同的字符集。
如果这些标准不符合您的意图,您将不得不进一步指明您的需求。
答案 1 :(得分:0)
您可以使用所有有效的'创建一个正则表达式。字符如:
String regexValidCharacters = "[A-Za-z0-9]*";
并执行以下操作:
if(invalidString.replaceAll(regexValidCharacters, "").length() > 0)
ABORT!
可能有更好的解决方案,但应该可以正常工作.. ^^