字符串匹配程序

时间:2015-07-23 06:16:12

标签: java

我正在尝试创建一个java程序来反转给定的字符串,每次迭代时,与反向字符串进行比较然后打印pass如果匹配则其他失败。

我的节目是:

package sss;

import java.util.Scanner;

public class ssi {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String original,reverse="";
        Scanner sc=new Scanner(System.in);
        int ascii11,ascii12,ascii13,ascii14;
        System.out.println("enter the string to be reversed");
        original=sc.next();
        int length=original.length();
        for(int i=length-1;i>=0;i--)
        {
            reverse=reverse+original.charAt(i);
        }
        System.out.println(reverse);
        //System.out.println(original);
        for(int j=0;j<original.length()-1;j++)
        {
            ascii11=original.charAt(j);
            ascii12=original.charAt(j+1);
            ascii13=reverse.charAt(j);
            ascii14=reverse.charAt(j+1);
            if(Math.abs(ascii11-ascii12) == Math.abs(ascii13-ascii14))
            {

                System.out.println("pass");

            }
            else 
            {

                System.out.println("fail");
            }   
        }

        // TODO Auto-generated method stub
        sc.close();
    }
}

这里每次for循环迭代我都会为每对数字传递或失败,但我希望o / p只打印通过或失败ONCE。

任何人都可以帮助我...

4 个答案:

答案 0 :(得分:1)

示例代码:

import java.util.Scanner;

public class PalindromeChecker {

    public static void main(String[] args) {

        String original;        
        Scanner sc = new Scanner(System.in);

        System.out.print("Enter the string to be reversed: ");
        original = sc.next();

        int halfLength = original.length()/2;
        int lastIndex = original.length() - 1;

        int i;
        for(i = 0; i < halfLength; i++) {
            if(original.charAt(i) != original.charAt(lastIndex - i)) {
                System.out.println("Fail!");
                break;
            }
        }

        // Managed to match all characters
        if(i == halfLength) {
            System.out.println("Pass!");
        }

        sc.close();
    }
}

<强>输入/输出:

Enter the string to be reversed: banana
Fail!
Enter the string to be reversed: RADAR
Pass!
Enter the string to be reversed: asdwwdsa
Pass!

所以我的想法是:

  • 将字符串的前半部分与字符串的后半部分进行比较
  • 将第一个字符与最后一个字符进行比较
  • 将第二个字符与第二个字符进行比较,依此类推。
  • 如果任何字符不匹配,请打印失败!
  • 如果循环结束,则表示字符串为palindrome(原始==反转),打印通过!

答案 1 :(得分:0)

您的print语句位于循环内部,因此每个循环的打印“通过”或“失败”。您应该使用标志来检查所有ascii字符是否相同。然后检查循环外标志的状态
使用StringBuffer它有一个内置的方法来反转字符串。

StringBuffer input = new StringBuffer("Your String to reverse");
String reverse = input.reverse().toString();
if(input.equals(reverse))
    System.out.println("pass");
else
    System.out.println("fail");

答案 2 :(得分:0)

您需要使用pass或fail boolean值标记原始字符和反转字符的每个比较。显然,如果其中任何一个标记为失败,则可以终止算法并打印失败。如果for循环继续向右传递,则在for循环之外打印一次。

答案 3 :(得分:-1)

if条件移出for循环。

for(int j=0;j<original.length()-1;j++)
{
    ascii11=original.charAt(j);
    ascii12=original.charAt(j+1);
    ascii13=reverse.charAt(j);
    ascii14=reverse.charAt(j+1);

}

if(Math.abs(ascii11-ascii12) == Math.abs(ascii13-ascii14))
{

    System.out.println("pass");

}
else 
{
    System.out.println("fail");
}