检测无效字符

时间:2014-04-22 18:09:51

标签: java

我正在读取制表符分隔的文本文件(从excel导出)到我的java应用程序中,但该文件可能包含我不想要的无效字符。例如,在电子表格中,我看到这些字符出现(我不生成电子表格):

�

当制表符分隔时显示为:

这显然是Unicode字符'REPLACEMENT CHARACTER'。如何在我的Java字符串中检测到这个字符,以便我可以中止导入?

String invalidString = "1234 � test2"

2 个答案:

答案 0 :(得分:1)

此问题的答案取决于您理解为无效字符的内容。

ASCII截断

一个简单的检查是检查代码点是否在某个范围内。最低的可打印字符是空格。它的十进制值为32.最高ASCII字符为~,十进制值为126.这会将其截断为可打印的ASCII字符范围,这对使用重音符号或类似字符的人来说是不利的。 / p>

印刷适性

另一种方法是检查某个字符是否可以打印某个字体。您可以使用java.awt.Font类。它提供了一个方法canDisplay,如果字体有一个字形来显示该字符,则返回该方法。这可能会奏效,但感觉非常糟糕。但是这个可以成为你想要的,我们无法知道。

有效的字母或数字

另一个标准可能是该字母是有效的字母或数字。 java.lang.Character类提供方法isLetterisDigit来确定这一点。

我们都知道TANSTAPT,所以你可能使用了错误的字符集。找出你是否使用与Excel相同的字符集。

如果这些标准不符合您的意图,您将不得不进一步指明您的需求。

答案 1 :(得分:0)

您可以使用所有有效的'创建一个正则表达式。字符如:

String regexValidCharacters = "[A-Za-z0-9]*";

并执行以下操作:

if(invalidString.replaceAll(regexValidCharacters, "").length() > 0)
    ABORT!

可能有更好的解决方案,但应该可以正常工作.. ^^