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

时间:2016-11-13 01:20:02

标签: 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.length())
        {
        return true;
        }
    } 
}

请原谅任何低效率;一般而言,编码仍然相对较新。我是否在使用运算符和.charAt()方面缺乏一些知识?这不合逻辑吗?或者我的错误在其他地方?

7 个答案:

答案 0 :(得分:3)

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

(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;
}

答案 1 :(得分:3)

使用正则表达式:

return str.matches("^(.)\\1*$");

使用流:

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

其他:

return str.replace(String.valueOf(str.charAt(0), "").length() == 0;

答案 2 :(得分:2)

正如安德鲁所说,你在for循环中正在减少i。您可以通过将其更改为int charb4 = i - 1;来解决此问题。至于使您的代码更有效,您可以将其浓缩为此。

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

答案 3 :(得分:1)

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

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

-1是因为我正在检查数组中的当前值,然后检查数组中的下一个值,因此我需要提前停止一个位置。

如果永远不会输入循环if语句,它将使代码足够远以返回true

答案 4 :(得分:0)

您必须创建一个用于搜索String-1长度的for循环。这样,由于程序试图获取第4个字母,因此该程序不会因3个字母而崩溃。这对我有用:

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;
}

答案 5 :(得分:0)

var array2 = [3.9, 7.7, 11.1, 1.11, 1.02, 3.3, 3.9, 0] let pointer2 = UnsafeMutablePointer<Double>.allocate(capacity: array.count) pointer2.initialize(from: &array, count: array.count) print(Array(pointer: pointer2, count: array.count))

这应该足够了

答案 6 :(得分:-1)

错误是由

引起的
global main
extern printf

section .data
gwiazdka db '*',10,0      ;HERE is my question

section .text
main:
mov rbx, 0

petla:
mov rdi, qword gwiazdka
mov rsi, rbx
mov rax, 0
call printf

inc rbx
cmp rbx, 4
jne petla

mov rax, 1
int 80h

此行等于

nasm -f elf64 program.asm
gcc program.o -o program
./program

因此,你的循环永远不会停止。
解决此问题的最简单方法

int charb4 = i--;