【问题标题】:Comparing a string created from a char[] [closed]比较从 char[] 创建的字符串 [关闭]
【发布时间】:2016-02-10 17:03:36
【问题描述】:

我的代码比较了两个单词之间的相等性。如果字符串相等,它会打印一个值“TRUE”。否则返回false。正在使用 Java "equals" 函数

class k{  

    public static void main(String args[]){  
        String s1="Sach";  
        String s2=word();  
        String s3=new String("Sach");   
        System.out.println(s1.equals(s2));  
        System.out.println(s1.equals(s3));      
    } 

    public static String word() {
        char[] str=new char[100];
        str[0]='S';
        str[1]='a';
        str[2]='c';
        str[3]='h';
        String ss=new String(str);
        System.out.println(ss);
        return ss;
    }
} 

我需要将一些选定的字母提取到一个数组中并将其转换为字符串。转换后,函数返回字符串。但是比较会导致错误的值。是否有其他方法可以将数组转换为字符串,以便该程序给出正确的结果。

【问题讨论】:

  • 虽然它们不一样 - s2 有 96 个尾随 '\0' 字符。将char[] str = new char[100] 更改为char[] str = new char[4]
  • 尝试打印 s2 的长度。你会明白
  • "fetch some selected alphabets" 为什么要获取从 A 到 Z 的字母,或者任何适合所选语言的字母,然后显示一个示例返回Sach?这 4 个字母不构成 字母表

标签: java string compare


【解决方案1】:

您在方法中创建新 String 的字符数组有超过 4 个字符,所以它当然不会等于另一个 String

确切地说,您的数组包含您指定的 4 个字符和另外 96 个空字符 ('\u0000'),因为您没有指定值并使用默认值。

将方法更新为仅指定一个由 4 个字符组成的数组,如下所示,您将获得预期的结果。:

public static String word() {
    char[] str = new char[4];
    str[0] = 'S';
    str[1] = 'a';
    str[2] = 'c';
    str[3] = 'h';
    String ss = new String(str);
    System.out.println(ss);
    return ss;
}

也如 cmets 中所述,您可以清理方法以不必指定数组长度,如下所示:

public static String word() {
    char[] str = new char[] {'S', 'a', 'c', 'h'};
    return new String(str);
}

【讨论】:

  • char[] str = {'S', 'a', 'c', 'h'};
  • String ss= new String(str,0,4);
  • @AndyTurner 当然可以。我只修复了与问题直接相关的内容。回答时最好也清理代码吗?
  • 为什么不 - 如果您要更改数组的长度以提供所需的行为,值得指出的是,您不需要首先明确说明数组长度.
  • @AndyTurner 好的,我更新了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多