2013-07-31 68 views
2

我有這樣如何區分ArrayList中的字符串和整數?

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

數組列表現在,如果我打印的清單輸出將是這樣的:

[somethingold, 3, somethingnew, 5 ] 

在這裏,我想只取整數元素。

我想要的輸出,如果它是一個整數把它放在其他列表中,否則在另一個列表中。

這就是我想要的:

[3,5] 
[somethingold, somethingnew] 
+4

一個壞主意。請使用兩個列表,並使用泛型使其更安全。 – Kayaman

+0

你可以去這個http://docs.oracle.com/javase/tutorial/extra/generics/index.html –

+0

或者一個'List '。 String和Integer之間的關係是什麼?他們是否必須進入同一個名單? – Thilo

回答

4

你嘗試過這個?:

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

通過循環中的每個元素列表

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 
    } 
    ... 
} 
+0

這僅僅是第一個元素。關於其他元素呢?甚至我嘗試使用每個沒有工作(對象對象:列表){ \t \t \t Object varobject.getClass(); \t \t \t \t \t \t \t \t \t如果(VAR的instanceof字串) \t \t \t { \t \t \t \t字符串NE =(字符串)VAR; \t \t \t \t str.add(ne); \t \t \t \t \t \t \t} \t \t \t如果(VAR的instanceof整數){ \t \t \t \t整數NER =(整數)VAR; \t \t \t \t in.add(ner); \t \t \t} \t \t} – Raj

+4

Raj只是把它包裝到循環。然後使用list.get(i)元素。 – Sajmon

+0

謝謝@Sajmon :-) – morgano

1

可以使用instanceof運營商實現它。

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

其非常簡單。只是兩行代碼

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

這是Java代碼? – anubhava

+0

這是不是Java代碼,問題被標記爲java –

0

建議應像List<Integer>List<String>創建類型的集合,如果你使用的是Java 1.5或更高版本。

在通用數組的情況下,您可以使用instanceOf運算符來區分。

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

好吧,如果我拿列表。但我怎麼只能從該 – Raj

+0

只提取inttegers你不能插入'Interger'值到'列表'因爲你必須創建不同的'列表' –

0

你必須使用for循環,因爲你可以找到字符串和整數獲取對象的列表。

下面的示例演示如何獲取值..

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

你試圖去在JDK的API,這是爲什麼泛型在Java中引入的最重要的原因之一,爲您提供鍵入安全收藏。

而您在添加或提取元素時無需擔心(不需要顯式類型轉換)。

一個友好的建議走了書。

感謝

0

你想[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] 
+0

它的工作正常..但看起來compcompated ..感謝 – Raj

0
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); 

試試這個,我希望它的工作原理

+0

java.lang.ClassCastException – Raj

+0

遐得到它,''''''''''s.sort()''可能會引發此異常,因爲列表包含整數和字符串。 – Joshi

0

使用番石榴庫,你可以做這樣的:

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