【问题标题】:How to differentiate String and Integer in ArrayList?如何区分ArrayList中的String和Integer?
【发布时间】:2013-07-31 19:28:58
【问题描述】:

我有这样的数组列表

ArrayList list = new ArrayList();
list.add("somethingold");
list.add(3);
list.add("somethingnew");
list.add(5);

现在如果我打印列表输出将是这样的:

[somethingold, 3, somethingnew, 5 ]

这里我只想获取整数元素。

我想要这样的输出,如果它是一个整数,把它放在另一个列表中,否则放在另一个列表中。

这就是我想要的:

[3,5]
[somethingold, somethingnew]

【问题讨论】:

标签: java string arraylist integer


【解决方案1】:

你试过了吗?:

if(list.get(0) instanceof Integer) {
    // is an integer
} else if (list.get(0) instanceof String) {
    // is a String
}

遍历 List 中的每个元素

for循环:

for (int i = 0; i < list.size(); i++) {
   if (list.get(i) instanceof Integer) {
      // do your stuff
   }
   if (list.get(i) instanceof String) {
      // do your stuff
   }
}

for-each 循环:

for (Object obj: list) {
   if (obj instanceof Integer) {
      // do your stuff
   }
   ...
}

【讨论】:

  • 这仅适用于第一个元素。其他的呢?甚至我尝试使用 for each didt work for (Object object : list) { Object varobject.getClass(); if(var instanceof String) { String ne=(String)var; str.add(ne); } if(var instanceof Integer){ Integer ner=(Integer)var; in.add(ner); } }
  • Raj 只是将其包装成循环。然后使用 list.get(i) 元素。
【解决方案2】:

您可以使用instanceof 运算符来实现它。

        for (Object object : list) 
        {
            if(object instanceof Integer)
            {
                System.out.println(object); // Integer
            }
            else if(object instanceof String)
            {
                System.out.println(object); // String
            }
        }

【讨论】:

    【解决方案3】:

    它非常简单。就两行代码

    string[] stringList = list.OfType<string>().ToArray();
     Int32[] intList = list.OfType<Int32>().ToArray();
    

    【讨论】:

      【解决方案4】:

      如果您使用 java 1.5+,建议创建类型化 Collection,如 List&lt;Integer&gt;List&lt;String&gt;

      如果是泛型数组,您可以使用 instanceOf 运算符来区分。

      for(Object obj: list){
         if(obj instanceOf Ineteger){
             ...
         }else if(obj instanceOf String){
             ...
         }
      }
      

      【讨论】:

      • 好吧,如果我拿 List 。但是我怎样才能只从中获取整数
      • 您不能将Interger 值插入List&lt;String&gt;,因为您必须创建不同的List&lt;Ineteger&gt;
      【解决方案5】:

      您正在尝试检查 JDK API,这是 Java 中引入泛型的最重要原因之一,以便为您提供类型安全的集合。

      而且您在添加或获取元素时无需担心(无需显式类型转换)。

      一个友好的建议。

      谢谢

      【讨论】:

        【解决方案6】:

        您想要 [3,5] [somethingold, somethingnew],它看起来已经像 2 个单独的列表。

        所以你可以这样做

        class IntegersAndStrings {
            private final List<String> strings = new ArrayList<String>();
            private final List<Integer> ints = new ArrayList<Integer>();
        
            public void add(int i) {
                ints.add(Integer.valueOf(i));
            }
        
            public void add(String s) {
                strings.add(s);
            }
        
            @Override
            public String toString() {
                return ints.toString() + strings.toString();
            }
        }
        

        像以前一样使用它

        class Main {
            public static void main(String[] args) {
                IntegersAndStrings list = new IntegersAndStrings();
                list.add("somethingold");
                list.add(3);
                list.add("somethingnew");
                list.add(5);
                System.out.println(list);
            }
        }
        

        输出将是

        [3, 5][somethingold, somethingnew]
        

        【讨论】:

          【解决方案7】:

          您必须使用 for-loop 获取对象列表,因为您可以找到字符串和整数。

          下面的例子展示了如何获取值..

          ArrayList list = new ArrayList();
          for (Object o : list) {
              if (o.getClass().equals(Integer.TYPE)) {
                 ...
              }
              else if (o.getClass().equals(String.class)) {
                 ...
              }
          }
          

          【讨论】:

            【解决方案8】:
            Collections.sort(list);
            int index = 0;
            for (Object obj: list) {
              index ++;
              if (obj instanceof String) {
                 break;
            }
            }
            
            List<Integer> integerList = list.subList(0.index);
            List<String> stringList = list.subList(index,list.size());
            
            System.out.println(integerList);
            System.out.println(stringList);
            

            试试这个,我希望它有效

            【讨论】:

            • java.lang.ClassCastException
            • 你知道了,Collections.sort() 可能会抛出这个异常,因为列表同时包含整数和字符串。
            【解决方案9】:

            使用 guava 库你可以这样做:

            System.out.println(
                 Iterators.toString(Iterators.filter(list.iterator(), String.class)));
            System.out.println(
                 Iterators.toString(Iterators.filter(list.iterator(), Integer.class)));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-10-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-02-21
              • 2014-01-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多