2012-02-01 61 views
2

我有一個String[]看起來像這樣在第一String是贈品屬性名稱,第二個是值:拆分的String []爲兩個其他的String []

String[] full = { "property1", "value1", "property2", "value2", "property3", "value3" }; 

我想拆分String[]到另外兩個String[]就像這樣:

String[] properties = { "property1", "property2", "property3" }; 
String[] values = { "value1", "value2", "value3" }; 

有編程這樣做的方法嗎?

PS:Stringsfull可能會有所不同

+0

這種「分裂」背後的邏輯是什麼? 's.startsWith( 「P」)'? – 2012-02-01 12:45:45

+0

它們通過它們的索引(i%2)被訪問,,,,, – Mackintoast 2012-02-01 12:47:17

+0

按照Peter的建議構建地圖,然後在Map對象上使用keySet()和values()方法 – kittylyst 2012-02-01 13:19:15

回答

12

屬性/值的數量最簡單的方法也只是:

String[] properties = new String[full.length/2]; 
String[] values = new String[full.length/2]; 
for (int i = 0; i < properties.length; i++) 
{ 
    properties[i] = full[i * 2]; 
    values[i] = full[i * 2 + 1]; 
} 

這是很難看你如何能做到這一點以比這更簡單的方式。你可能希望驗證開始於full.length甚至是。

任何理由建立兩個數組而不是(比如說)Map<String, String>

+0

我更喜歡使用數組,因此可以填充列表更容易。 (只是Javascript的一個老習慣) – 2012-02-01 13:10:22

3

而不是分裂成兩個數組,它通常更有用的建立一個地圖快速查找。

public static Map<String, String> asMap(String... keyValuePairs) { 
    Map<String, String> map = new LinkedHashMap<>(); 
    for(int i = 0; i < keyValuePairs.length; i += 2) 
     map.put(keyValuePair[i], keyValuePait[i+1]); 
    return map; 
} 

Map<String, String> map = asMap("property1", "value1", 
           "property2", "value2", 
           "property3", "value3"); 
String value3 = map.get("property3"); 
0

您可以將偶數成員和奇數成員拆分爲2個字符串[]。因此,您必須分配每個子字符串的大小。 如果原始字符串有奇數長度,包含奇數成員的子字符串是長度和子字符串,並且包含偶數成員的子字符串是長度+ 1。否則2子字符串是相同的長度=長度/ 2。

相關問題