如何忽略包含特殊字符的数组中的字符串

时间:2017-04-03 13:44:00

标签: java arrays

我正试图让我的程序忽略包含各种特殊字符的数组中的字符串,并打印那些不包含任何我试图让我的程序读取的数组的字符串如下

TestCase[] testCases = { 
      new TestCase("", false),
      new TestCase("5875123699", true),
      new TestCase("123456", false),
      new TestCase("12312312S1", false),
      new TestCase("1234567841", true),
      new TestCase("12312312312", false),
      new TestCase("2222222222", false),
      new TestCase("2222222232", true),
      new TestCase("-875123699", false),
      new TestCase("58751236.9", false),
      new TestCase(null, false),`

4 个答案:

答案 0 :(得分:1)

不确定您需要什么(在您的情况下是什么特殊字符),但如果您只想传递数字,请尝试使用其中之一:How to check if a String is numeric in Java

答案 1 :(得分:0)

你需要谨慎行事,因为你的字段可以为空...(就像上一个TestCase一样)

假设您可以使用java 8进行过滤,并且条件是String匹配仅数字模式,您的过滤器可以通过仅更改该过滤器来改进和修改...

Object[] t = Arrays.stream(testCases).filter(x -> 
          x.getName() != null && x.getName().matches("\\d+") 
 ).toArray();

答案 2 :(得分:0)

从您的评论中我想您要检查您的字符串是否包含非字母数字字符。答案是here

要将其应用于数组,您必须检查数组中的每个元素。可以使用简单的for循环,也可以使用例如为此流。由于for循环相当简单,我将展示流解决方案。这遍历所有字符串,而不是每个字符串中的每个字符,并过滤非字母数字字符串:

String [] array = new String[]{"asdf", ", ", "jklö", "%&"};
String[] filtered = Stream.of(array).filter(s -> s.chars().allMatch(Character::isLetterOrDigit)).toArray(String[]::new);
//will print [asdf, jklö]
System.out.println(Arrays.toString(filtered));

如果您想要过滤以排除例如我使用过的ö(它是字母数字,但有点特殊),只需将isLetterOrDigit函数替换为您自己的一个检查。< / p>

哦,与他的评论中提到的domdom无关,你应该在你的旧问题上正确标记正确答案。

答案 3 :(得分:0)

我认为你应该使用patternmatcher和一些正则表达式来检查你的字符串是否包含一些特殊字符。

无论如何,我想下一个链接将为您提供最佳解决方案。

check a string if there is a special character in it