java 如何识别用户输入字符串中不匹配的字符

xe55xuns  于 2023-02-11  发布在  Java
关注(0)|答案(2)|浏览(168)

此项目用于确定用户的输入是否为回文,如果不是,则确定不匹配的字符数及其在字符串中的位置(即字符2和4不匹配)。我已经能够弄清楚如何识别字符串是否是回文,但我一直在纠结如何明确识别非回文中不匹配的字符。以下是目前为止我的代码:

import java.util.Scanner;

public class Palindrome
{
   public static void main(String[] args)
   {
      
      String stringInput = "";
      String inputReverse = "";
      
      boolean isPalindrome = true;
      
      Scanner keyboard = new Scanner(System.in);
      
      System.out.print("Enter a string: ");
      stringInput = keyboard.nextLine();
      
      
      int stringLength = stringInput.length();
      
      for(int i = stringLength - 1; i >=0; i--)
      {
        inputReverse = inputReverse + stringInput.charAt(i);
      }
      
      if(stringInput.equals(inputReverse))
      {
         System.out.println(stringInput + " is a valid palindrome.");
      }
      else
      {
         System.out.println(stringInput + " is not a valid palindrome.");
      }
   }
}

当字符串不是回文时,我想要的输出是:"索引0和3处的字符不匹配。goop不是有效的回文。无效字符匹配数:1英寸
我尝试使用stringInput. charAt(0),但是用户输入是不可预测的,所以我不能永远使用char 0,1,2,3等。

mnemlml8

mnemlml81#

从字符串的两端迭代,向中间移动,每次检查相应的字符。

int nomatch = 0;
for (int i = 0, j = stringLength - 1; i < j; i++, j--) {
    if (stringInput.charAt(i) != stringInput.charAt(j)) {
        ++nomatch;
        System.out.format("The characters at index %d and %d do not match.%n", i, j);
    }
}
if (nomatch == 0) System.out.println(stringInput + " is a palindrome.");
else System.out.println(stringInput + " is not a palindrome. Number of invalid character matches: " + nomatch);
blmhpbnm

blmhpbnm2#

由于这是home work,我只给予一般性的提示:

  • 反转字符串的简单方法是inputReverse = new StringBuilder(stringInput).reverse().toString();
  • 您只需要将输入的前半部分的每个字符与其反向字符进行比较
  • 使用intfor循环(从0到长度的一半),并将其传递给charAt(),用于两个字符串,然后使用==进行比较
  • 将差异的索引存储在List<Integer>

相关问题