【问题标题】:How to compare a CharSequence to a String - Android如何将 CharSequence 与字符串进行比较 - Android
【发布时间】:2013-09-09 02:47:35
【问题描述】:

我有一个将文本放入 arrayList 的类。然后,当我尝试将变量与 == "test"; 之类的字符串进行比较时,它将所有变量转换为 CharSequences;它在这里不起作用是我用来获取变量的代码

class Item {
            String descs;

            public Item (String descs){

                 this.descs = descs;

                 }


            public CharSequence getDescs() {
                return descs;
            }
        }

这是将其与字符串进行比较的代码

 if(p.getDescs().toString() == "trash"){

          descsView.setVisibility(View.GONE);

                            }

          else{
              descsView.setText(p.getDescs());

                            }

我知道 p.getDescs() 等于垃圾,因为当它为 decsView 设置文本时,它被设置为垃圾。那么为什么第一个 if 语句不起作用?

【问题讨论】:

  • 我重新提出这个问题是因为supposed duplicate 不处理CharSequence。在某些有效情况下,.equals 可能返回 false 不是因为内容不同,而是因为一个是 String 而另一个是 StringBuilder

标签: java android string charsequence


【解决方案1】:

使用.equals.equalsIgnoreCase 比较字符串

     if(p.getDescs().toString().equals("trash"))

也检查一下

What is the difference between == vs equals() in Java?

【讨论】:

    【解决方案2】:

    简介

    CharSequence 是一种通用类型,包括其他类型,例如 StringStringBuilderSpannableString 等。如果您要比较两个字符串,您可以使用.equals(请参阅this question)。但是,如果您将StringCharSequence 进行比较,则必须确定要比较的是什么,因为您可能会将StringStringBuilderSpannableString 或其他内容进行比较。

    仅比较内容

    如果只想比较String的内容(即文本)和CharSequence的内容,而不关心类型,那么可以使用String.contentEquals()

    String myString = "hello";
    CharSequence myCharSequence = new StringBuilder("hello");
    
    boolean areEqual = myString.contentEquals(myCharSequence); // true
    

    比较内容和类型

    如果您还想确保除了内容之外的类型相同,请使用String.equals()

    String myString = "hello";
    CharSequence myCharSequence = new StringBuilder("hello");
    
    boolean areEqual = myString.equals(myCharSequence); // false
    

    这里又是相同的类型。

    String myString = "hello";
    CharSequence myCharSequence = "hello"; // String
    
    boolean areEqual = myString.equals(myCharSequence); // true
    

    另见

    【讨论】:

    • 我之前不知道contentEquals()。在这里很有用。加一。
    【解决方案3】:

    String比较需要使用equals()方法...

    if(p.getDescs().toString().equals("trash")){
        descsView.setVisibility(View.GONE);
        }
    else{
        descsView.setText(p.getDescs());
        }
    

    请参阅How do I compare strings in Java? 了解更多信息。

    【讨论】:

      【解决方案4】:

      如果 decs 是您的 CharSequence 变量:

      descs.toString().equals("SomeString");
      

      【讨论】:

        【解决方案5】:

        最好的方法应该是这样的

        if("trash".equals(p.getDescs()){
            descsView.setVisibility(View.GONE);
            }
        else{
            descsView.setText(p.getDescs());
            }
        

        或者,如果比较不区分大小写,则

         if("trash".equalsIgnoreCase(p.getDescs()){
                descsView.setVisibility(View.GONE);
                }
            else{
                descsView.setText(p.getDescs());
                }
        

        功能

         <String>.equalus(Object)
        

        将任何字符串变量与对象变量的值进行比较

        注意:因为p.getDescs()的值可能为null

        所以使用

        if(p.getDescs().toString().equals("trash")){
            descsView.setVisibility(View.GONE);
            }
        else{
            descsView.setText(p.getDescs());
            }
        

        可能在运行时出现错误

        以下链接可能会有所帮助

        How to compare string values of CharSequence[]?

        CharSequence vs String

        【讨论】:

          【解决方案6】:

          当前接受的答案

          if(p.getDescs().toString().equals("trash"))
          

          可以简化为

          if("trash".contentEquals(p.getDescs()))
          

          Suragch 的“介绍”答案提供了详细信息。这是直接将 CharSequence 与 String 进行比较的方法,这是 OP 要求的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-08-14
            • 2017-05-30
            • 2012-10-06
            • 2019-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多