Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,确保字符串只包含字母数字、空格和破折号_Java_String_Parsing_Contains - Fatal编程技术网

Java,确保字符串只包含字母数字、空格和破折号

Java,确保字符串只包含字母数字、空格和破折号,java,string,parsing,contains,Java,String,Parsing,Contains,在Java中,我需要确保字符串只包含字母数字、空格和破折号字符 我发现类org.apache.commons.lang.StringUtils和几乎足够的方法isAlphanumericSpace(String)。。。但我还需要包括破折号 最好的方法是什么?我不想使用正则表达式。只需迭代字符串,使用java.lang.character中的字符类方法来测试每个字符是否可以接受。这大概就是StringUtils方法所做的一切,正则表达式只是一种驱动通用引擎做同样事情的方法。。。只需使用String

在Java中,我需要确保字符串只包含
字母数字
空格
破折号
字符

我发现类
org.apache.commons.lang.StringUtils
和几乎足够的方法
isAlphanumericSpace(String)
。。。但我还需要包括破折号


最好的方法是什么?我不想使用正则表达式。

只需迭代字符串,使用java.lang.character中的字符类方法来测试每个字符是否可以接受。这大概就是StringUtils方法所做的一切,正则表达式只是一种驱动通用引擎做同样事情的方法。。。只需使用String.chatAt(int)自己编程即可,非常简单

使用位置索引遍历字符串中的所有char,然后使用ASCII字符0到9、a到z和a到z使用连续代码这一事实进行比较,因此您只需检查字符x是否以数字方式验证以下条件之一:

  • 介于“0”和“9”之间
  • 在“a”和“z”之间
  • 在“A”和“Z”之间
  • 空格“
  • 连字符'-'
下面是一个基本代码示例(使用CharSequence,它允许您将字符串和StringBuilder作为arg传递):

public boolean isValidChar(CharSequence seq){
int len=序列长度();
对于(int i=0;i您有两个选项中的一个:
1.编写一个字符串中的字符列表,然后循环字符串检查以确保每个字符都在列表中。
2.编写一个字符串中不能包含的字符列表,然后循环字符串检查以确保每个字符都不在列表中

选择任何更快的选项组成列表。

您可以使用:

StringUtils.isAlphanumericSpace(string.replace('-', ' '));

一定要使用regex表达式。如果有一个非常全面的系统来完成这项任务,那么编写您自己的系统是没有意义的。如果您需要了解或复习regex,请访问此网站,它非常棒:


在这一点上,我要挑战一下自己。

在同一个库中,我还看到该方法只包含(String,char[]),但这意味着我必须列出整个字母表、从0到9的数字以及一个空格和一个破折号……对于我需要做的事情来说,似乎有点过于明确。我将使用java.lang.Character测试,而不是基于ASCII字符集进行假设。是的,Character.isleterordigit()确实如此,但它带来了非常显著的性能成本(比简单的代码点比较慢4到5倍)。它将拒绝许多其他有效的字母字符-这些字符在英语中使用不多,因此需要1μs而不是4μs。(是的,它将拒绝“μs”:-)假设他没有说,为了得到一个小的性能增益,他没有要求不是一个好主意。考虑Skiffead的建议使用Strutuuls.IsAdAudiaMuleCiScRe空间,在我的拙见中,它要好得多。为了清晰,Skiead意味着Strutuuls.IsAdAudiuMuleCiString(String),这比手工编码交互式检查要好得多。
StringUtils.isAlphanumericSpace(string.replace('-', ' '));