Java 检测字符串是否仅由一种字符组成
我想知道Java 检测字符串是否仅由一种字符组成,java,string,character,Java,String,Character,我想知道字符串是否只由一种类型的字符重复组成 例如,我想检测一个字符串是否只由“b”组成,因此“bb”、“bbbbbb”、“bbbbbbbbb” 获取字符串的第一个字符,并将其与剩余字符进行比较,如果它没有更改,则该字符串只有一种字符类型(此解决方案适用于非BMP unicode) public boolean SameCracterInString(字符串字符串){ if(string==null | | string.isEmpty()) 返回false; 对于(int i=1;i和< Ca
字符串
是否只由一种类型的字符重复组成
例如,我想检测一个
字符串
是否只由“b”组成,因此“bb”、“bbbbbb”、“bbbbbbbbb” 获取字符串的第一个字符,并将其与剩余字符进行比较,如果它没有更改,则该字符串只有一种字符类型(此解决方案适用于非BMP unicode)
public boolean SameCracterInString(字符串字符串){
if(string==null | | string.isEmpty())
返回false;
对于(int i=1;i
获取字符串的第一个字符,并将其与剩余字符进行比较,如果它没有更改,则字符串只有一种字符类型(此解决方案适用于非BMP unicode)
public boolean SameCracterInString(字符串字符串){
if(string==null | | string.isEmpty())
返回false;
对于(int i=1;i
正则表达式怎么样
String pattern = "([a-zA-Z])\\1*";
if (string.matches(pattern)) {
// The string contains is made up of the same character...
}
正则表达式怎么样
String pattern = "([a-zA-Z])\\1*";
if (string.matches(pattern)) {
// The string contains is made up of the same character...
}
使用
使用反向引用的内容
boolean b = Pattern.matches("^(.)\\1+$", "aaaaaaa");
//true
b = Pattern.matches("^(.)\\1+$", "aaaabbbbaaa");
//false
如果您还想匹配一个1个字符的字符串,请使用将正则表达式中的+
更改为*
String regex = "^" + str.charAt(0) + "+$"
return str.replaceAll(regex,"").length() == 0 ? true : false;
使用反向引用的内容
boolean b = Pattern.matches("^(.)\\1+$", "aaaaaaa");
//true
b = Pattern.matches("^(.)\\1+$", "aaaabbbbaaa");
//false
如果还想匹配一个1个字符的字符串,请将正则表达式中的+
更改为*
String regex = "^" + str.charAt(0) + "+$"
return str.replaceAll(regex,"").length() == 0 ? true : false;
我提出了许多其他的方法来实现这一点,但是使用正则表达式(如上所述)是我能想出的唯一简单的方法,可以正确处理unicode基本多语言平面之外的字符,例如
System.err.println(isOneChar(“
我提出了许多其他的方法来实现这一点,但是使用正则表达式(如上所述)是我能想出的唯一简单的方法,可以正确处理unicode基本多语言平面之外的字符,例如
System.err.println(isOneChar)(“但这会失败,例如,“11111”。然后将其从a-zA-z
更改为其他内容。这不是一个最终解决方案,如果他愿意,他可以根据自己的规格进行调整。有人愿意告诉我为什么他们否决了我吗?如果我错了,我想知道原因。我没有否决,但仍然缺少一件事,那就是你需要在两端锚定模式。也许你也可以需要一个+
而不是*
。使用+将拒绝单个字符串。匹配不需要锚,它总是尝试匹配整个字符串。但这会失败,例如,“11111”。然后将其从a-zA-z
更改为其他内容。这不是一个最终解决方案,如果他愿意,他可以根据自己的规格进行调整。有人愿意告诉我为什么他们否决了我吗?如果我错了,我想知道原因。我没有否决,但仍然缺少一件事,那就是你需要在两端锚定模式。也许你也可以需要一个+
而不是*
。使用+将拒绝单个字符串。匹配不需要锚定,它总是尝试匹配整个字符串。您不需要在开始和结束时锚定模式吗?^…$
您的意思是?我不确定我是否做对了。我认为这仍然可能是错误的。您会这样做吗不捕获只有一个字符长的案例?将+
更改为*
,您应该会很好。这很有趣。谢谢@Michael和Ted:)你不需要在开头和结尾锚定模式吗?^…$
你的意思是?我不确定我是否做对了,我认为这可能仍然是错误的。你不会抓住只有一个字符长的案例吗?将+
更改为*
,你应该很好。这很有趣。谢谢@Michael和Ted:)如果STR以一个正则表达式元字符开始呢?这是避免反向引用的狡猾想法,但是它不起作用,因为您不能依赖于CARAT以基本的多语言平面之外的方式工作。请考虑这些<代码>系统.Er.PrtLn(“a”)。(Stras.ValueOf(“A”.CARAT(0)));< /C>和<代码> Stry.Er.PrtLn(“如果STR以一个正则表达式元字符开始呢?这是避免反向引用的狡猾想法,但是它不起作用,因为您不能依赖于CARAT以基本的多语言平面之外的方式工作。请考虑这些<代码>系统.Er.PrtLn(“a”)。(Stras.ValueOf(“A”.CARAT(0)));< /C>和< Case> Stray.Er.PrtLn(“谢谢。在写这个答案之前,我没有想到大多数使用chartAt、length或char原语的java代码可能是错的。谢谢。在写这个答案之前,我没有想到大多数使用chartAt、length或char原语的java代码可能是错的。