Java 如果字符串中的所有字母都相同,则尝试返回true

Java 如果字符串中的所有字母都相同,则尝试返回true,java,char,operators,Java,Char,Operators,到目前为止,我所拥有的: public boolean allSameLetter(String str) { for (int i = 1; i < str.length(); i++) { int charb4 = i--; if ( str.charAt(i) != str.charAt(charb4)) { return false; } if ( i == str.le

到目前为止,我所拥有的:

 public boolean allSameLetter(String str)
{
  for (int i = 1; i < str.length(); i++)
    {
        int charb4 = i--;
        if ( str.charAt(i) != str.charAt(charb4))
        {
        return false;
        }

        if ( i == str.length())
        {
        return true;
        }
    } 
}
public boolean allSameLetter(String str)
{
对于(int i=1;i

请原谅任何低效(如有);一般来说,编码还是比较新的。我是否缺乏将运算符和.charAt()一起使用的知识?这不合逻辑吗?还是我的错误在其他地方?

如果你不理解其中的一部分,请发表评论:)

public boolean allSameLetter(String str)
{
对于(int i=1;i
-1存在,因为我正在检查数组中的当前值,然后是数组中的下一个值,因此我需要提前停止一个位置


如果从未输入loop If语句,它将在代码中占据足够的位置,如果您不理解其中的一部分,它将返回true(

注释:)

public boolean allSameLetter(String str)
{
对于(int i=1;i
-1存在,因为我正在检查数组中的当前值,然后是数组中的下一个值,因此我需要提前停止一个位置


如果从未输入loop If语句,它将使其在代码中足够远,以返回true

,正如Andrew所说,您在for循环中减少了
i
。您可以将其更改为
intcharb4=i-1。至于让你的代码更有效率,你可以把它浓缩成这样

public boolean allSameLetter(String str) {
    for(char c : str.toCharArray())
        if(c != str.charAt(0)) return false;
    return true;
}

正如Andrew所说,您正在for循环中减少
i
。您可以将其更改为
intcharb4=i-1。至于让你的代码更有效率,你可以把它浓缩成这样

public boolean allSameLetter(String str) {
    for(char c : str.toCharArray())
        if(c != str.charAt(0)) return false;
    return true;
}

您可以按照以下步骤操作:

(1) 获取第一个字符(即第0个索引)

(2) 检查第一个字符是否与后续字符相同,如果不返回
false
(并从方法中出来)

(3) 如果所有字符都匹配,即处理一直进行到方法结束并返回
true

  public boolean allSameLetter(String str) {
  char c1 = str.charAt(0);
  for(int i=1;i<str.length;i++) {
      char temp = str.charAt(i);
      if(c1 != temp) {
         //if chars does NOT match, 
         //just return false from here itself,
         //there is no need to verify other chars
         return false;
      }
  }
  //As it did NOT return from above if (inside for)
  //it means, all chars matched, so return true
  return true;
}
public boolean allSameLetter(String str){
字符c1=str.charAt(0);

对于(int i=1;i,您可以按照以下步骤操作:

(1) 获取第一个字符(即第0个索引)

(2) 检查第一个字符是否与后续字符相同,如果不返回
false
(并从方法中出来)

(3) 如果所有字符都匹配,即处理一直进行到方法结束并返回
true

  public boolean allSameLetter(String str) {
  char c1 = str.charAt(0);
  for(int i=1;i<str.length;i++) {
      char temp = str.charAt(i);
      if(c1 != temp) {
         //if chars does NOT match, 
         //just return false from here itself,
         //there is no need to verify other chars
         return false;
      }
  }
  //As it did NOT return from above if (inside for)
  //it means, all chars matched, so return true
  return true;
}
public boolean allSameLetter(String str){
字符c1=str.charAt(0);
对于(inti=1;i而言,错误是由

int charb4 = i--;
这条线等于

int charb4 = i-1;
i=i-1;
因此,您的循环将永远不会停止。
解决这个问题的最简单方法

public boolean allSameLetter(String str)
{
  for (int i = 1; i < str.length(); i++)
  {
     if ( str.charAt(i) != str.charAt(i-1))
     {
       return false;
     }
  } 
}
public boolean allSameLetter(String str)
{
对于(int i=1;i
该错误是由

int charb4 = i--;
这条线等于

int charb4 = i-1;
i=i-1;
因此,您的循环将永远不会停止。
解决这个问题的最简单方法

public boolean allSameLetter(String str)
{
  for (int i = 1; i < str.length(); i++)
  {
     if ( str.charAt(i) != str.charAt(i-1))
     {
       return false;
     }
  } 
}
public boolean allSameLetter(String str)
{
对于(int i=1;i
您必须创建一个for循环来搜索字符串-1的长度。这样,程序不会因为3个字母的单词而崩溃,而程序会试图获取第4个字母。这对我来说是有效的:

public boolean allSameLetter(String str)
{
    for(int i = 0; i< str.length()-1; i++){
        if (str.charAt(i) != str.charAt(i+1)){
            return false;
        }
    }
    return true;
}
public boolean allSameLetter(String str)
{
对于(int i=0;i
您必须创建一个for循环来搜索字符串-1的长度。这样,程序不会因为3个字母的单词而崩溃,而程序会试图获取第4个字母。这对我来说是有效的:

public boolean allSameLetter(String str)
{
    for(int i = 0; i< str.length()-1; i++){
        if (str.charAt(i) != str.charAt(i+1)){
            return false;
        }
    }
    return true;
}
public boolean allSameLetter(String str)
{
对于(int i=0;i
使用正则表达式:

return str.matches("^(.)\\1*$");
使用流:

str.chars().allMatch(c -> c == str.charAt(0));
其他:

return str.replace(String.valueOf(str.charAt(0), "").length() == 0;
使用正则表达式:

return str.matches("^(.)\\1*$");
使用流:

str.chars().allMatch(c -> c == str.charAt(0));
其他:

return str.replace(String.valueOf(str.charAt(0), "").length() == 0;
if((新HashSet(Arrays.asList(s.toCharArray()))).size()=1)
返回true;
返回false;

如果((新的HashSet(Arrays.asList(s.toCharArray()))).size()=1),这应该足够了 返回true; 返回false;


这应该足够了

你到底想实现什么?比较两个字符串?一件事:完整地命名变量,不要缩写它们。你在减少
i
,所以你进入了一个无限循环……让代码检查字符串是否由相同的字母组成。(即“aaa”、“oooo”、“ddddd”)相关帖子-你到底想实现什么?比较两个字符串?一件事:完整地命名变量,不要缩写它们。你正在减少
i
,因此你进入一个无限循环…让代码检查字符串是否由相同的字母组成。(即“aaa”、“oooo”、“ddddd”)相关帖子-可以提高效率,但我选择保留代码是为了帮助您。没问题:)可以提高效率,但我选择保留代码是为了帮助您。没问题:)你能解释一下第一个正则表达式吗?你能解释一下第一个正则表达式吗?解释会很有帮助。此外,你的答案似乎与提问者的技能水平不匹配。解释会很有帮助。此外,你的答案似乎与提问者的技能水平不匹配。