【问题标题】:compare two strings using loops in java insensitive case? [closed]在java不区分大小写中使用循环比较两个字符串? [关闭]
【发布时间】:2014-05-12 19:52:52
【问题描述】:

编写一个程序来读取两个字符串,如果它们不区分大小写,则打印“Equal”。例如:

  • 输入:代码代码
    • 输出:相等
  • 输入:Masr Masry
    • 输出:不相等
  • 输入:埃及EGYpt
    • 输出:相等

注意:您应该使用循环。不要使用一些现有的方法来检查相等性。

我已经尝试了这段代码,但失败了 5 次以上 :(

import java.util.Scanner;
public class equal {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        String st1=in.nextLine();
        String st2=in.nextLine();
        int len1=st1.length();
        int len2=st2.length();
        int y=1;
        if(len1==len2){
            char ch1=st1.charAt(0);
            char ch2=st2.charAt(0);
            int con1=ch1 , con2=ch2;
            if(con1==con2){
                for(int x=1;x<len1;x++){
                    char Ch1=st1.charAt(x);
                    char Ch2=st2.charAt(x);
                    if(Ch1==Ch2){
                        y++;
                    }
                }
            }
        }
        if(y==len1){
            System.out.println("Equal");
        }else if(y!=len1){
            System.out.println("Not Equal");
        }
    }
}

【问题讨论】:

  • 你看Character.toLowerCase了吗?
  • "你应该使用循环。不要使用一些现有的方法来检查相等性。" -1。这是完全错误的。
  • @djechlin 这家伙已经尝试了一些东西,所以让我们尝试以他的方式帮助他
  • @djechlin 如果他/她已经尝试并展示了努力(和代码),为什么不提供帮助?即使有更简单的方法(例如使用.equalsIgnoreCase),也许作业的目的是让学生思考简单的方法在内部是如何工作的。
  • 请注意,在循环中,如果您在任何时候看到两个不相等的字符,您可以返回 false,您不需要继续循环,因为您知道它们不一样。

标签: java loops


【解决方案1】:

选项 1:

正如用户ZouZou所说,您可以轻松使用:

char ch1=Character.toLowerCase(st1.charAt(x));

选项 2:

但是,如果您想避免选项 1,您可以使用 switch/case 语句(或 if/else-if)语句创建自己的方法。您接收一个字符并返回一个小写版本(如果存在)。否则只返回给定的当前字符。

public static char charToLowerCase(char ch){
    switch (ch) {
        case 'A': return 'a'';
        case 'B': return 'b';
        //etc.  write rest of cases
        default:  return ch;
    }
}

然后在你的主循环中:

char ch1=charToLowerCase(st1.charAt(x));

选项 3:

选项 2 是一个简单的解决方案,不是最有效的,但很容易理解。它对于这个任务仍然非常有用。如果你想通过操作字符的 ASCII 值来改变字符,那么看看这个answer 和这个answer

char toLowerCase(char c){
    if(c>=97 && c<=122)
        return (char) (c-32);
    else
        return c;
}

注意:这个例子只处理 ASCII 而不是 Unicode!

【讨论】:

  • 为什么投反对票?如果你不解释你的投反对票(尤其是神秘的第一个投反对票者),投反对票有什么意义
  • 我没有对你投反对票,但是在字母上使用 switch case 的解决方案非常糟糕。您可以更轻松地进行 ASCII 操作。
  • 那个开关盒的东西很重。
  • @Kon 对于初学者来说一个简单的解决方案现在可能更好。
  • @Cyber​​neticTwerkGuruOrc 我喜欢简单,但在我看来,以前的解决方案接近于不好的做法。我赞成您当前的解决方案。
【解决方案2】:

检查这个.. 可能不是完美的,但应该有助于你的事业(虽然我永远不会喜欢这样做)

import java.util.Scanner;    
public class Equal {    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String st1 = in.nextLine();
        String st2 = in.nextLine();
        int len1 = st1.length();
        int len2 = st2.length();
        int y = 0;
        if (len1 == len2) {
            for (int x = 0; x < len1; x++) {
                int Ch1 = st1.charAt(x);
                int Ch2 = st2.charAt(x);    
                if (Ch1 >= 65 && Ch1 <= 90) {
                    Ch1 = Ch1 + 32;
                }
                if (Ch2 >= 65 && Ch2 <= 90) {
                    Ch2 = Ch2 + 32;
                }    
                if (Ch1 == Ch2) {
                    y++;
                } else {
                    break;
                }
            }
        } else {
            System.out.println("Not Equal");
        }

        if (y == len1) {
            System.out.println("Equal");
        } else {
            System.out.println("Not Equal");
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多