【问题标题】:How do you check if the first half of a string is the same as the second half of the string?如何检查字符串的前半部分是否与字符串的后半部分相同?
【发布时间】:2018-01-18 00:55:12
【问题描述】:

如何检查字符串的前半部分是否与字符串的后半部分相同? (不要与回文混淆)这是我到目前为止的代码。

   Scanner oIn = new Scanner (System.in);
   String sFB = oIn.nextLine();
   int length = sFB.length();

   boolean bYes = true;
   char cA, cB;

   for (int i = 0; i < length/2; i++){
      cA = sFB.charAt(i);
      cB = sFB.charAt(/*what do i put here?*/);

       if (cA != cB){
           bYes = false;
           break;
       }
   }

   if (bYes) {
       System.out.println("It's the same");
   }
   else {
       System.out.println("It's not the same");
   }

示例字符串输入: 阿巴布

输出: 一样的

【问题讨论】:

  • 考虑提供一个你正在尝试做的事情的例子。也许是您正在测试的字符串的示例?
  • 不清楚你在问什么。请edit您的帖子更具体,提供字符串示例和比相同的更清晰的解释。当您这样做时,请包含您为自己解决问题而编写的代码。
  • 你使用substringequalsint len = (s.length() + 1) / 2; if (s.substring(0, len).equals(s.substring(s.length() - len))) { ... }
  • 当你说字符串时。它可以是 String input="String";或 String input="I am a String"。所以请提供您的输入和预期输出。这会很有帮助。

标签: java string replaceall


【解决方案1】:

如果您的输入长度为奇数,则它与后半部分不同。

if(sFB.length()%2!=0){
System.out.println("It's not the same");
}

完整代码如下。

public class StringEqualsSecondHalf {

public static void main(String[] args) {
    String sFB="String";
    if(sFB.length()%2!=0){
        System.out.println("Its not same");
    }
    else{
        String firstHalf=sFB.substring(0,sFB.length()/2);
        System.out.println("First Half "+firstHalf);
        String secondHalf=sFB.substring(sFB.length()/2,sFB.length());
        System.out.println("Second Half "+secondHalf);
        if(firstHalf.equals(secondHalf)){
            System.out.println("They are same");
        }
        else{
            System.out.println("They are not same");
        }
    }

}

}

【讨论】:

    【解决方案2】:
    public static boolean halfEquals(String string) {
    
        char[] stringArray = string.toCharArray();
    
        int firstHalfEnd = (stringArray.length / 2);
        int seconHalfStart = (stringArray.length / 2) + (stringArray.length % 2);
    
        for (int position = 0; position <  firstHalfEnd; position++) {
            if (stringArray[position] != stringArray[position + seconHalfStart]) {
                return false;
            }
        }
    
        return true;
    }
    

    String.toCharArray() 是关键,比 charAt() 简单得多。

    编辑输出:

    abab ->真

    abcab ->真

    abde ->假

    abcde ->假

    x ->真

    ->是的

    【讨论】:

      【解决方案3】:

      你有两种情况:如果字符串的长度是 oddeven

      要检查一个字符串s 是偶数还是奇数,你% 它的长度。

      要解决您的算法,请将其替换为:

       cB = sFB.charAt(i + length / 2);
      

      您也可以在 String 类中使用substring

      您可以使用substring获取前半部分和后半部分。

      public static boolean sameAsHalf(String s){
      
          if(s.length() == 1){
              return true;
          }
      
          if(s.length() % 2 == 0){
      
              String firstHalf = s.substring(0, s.length()/2);
              System.out.println(firstHalf);
      
              String secondHalf = s.substring(s.length()/2);
              System.out.println(secondHalf);
              return firstHalf.equals(secondHalf);
          }
      
          return false;
      }
      

      如果您来自其他语言,请使用equals 检查字符串的内容是否相等。

      【讨论】:

      • 检查后半部分是否是前半部分的镜像,例如abccba。不是要问什么问题,例如abcabc(前半部分与后半部分相同)。
      • 如果您认为问题不清楚,请在回答之前要求澄清。我将按照问题中实际写的内容进行:前半部分后半部分相同。 “相同”,不倒退或镜像。
      • 你的else 可以只返回false,因为奇数长度的字符串永远不会被平均分割。
      猜你喜欢
      • 2021-05-17
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多