2014-11-13 52 views
-1

问题:我有一个字符串100, 200, boxes。我想将此字符串转换为对象,例如TreeMap<String, List>,其中100, 200作为值列表,而boxes作为字符串是关键字。 结果应该看起来像[100, 200]: "boxes"如何一次访问拆分字符串的两个元素?

后来我想访问值:my_map.get("boxes")[0]my_map.get("boxes")[1]例如。

我的解决方案:比方说,我有一个3列的文件,我读取数据,拆分它并遍历每一行,在行进中将行分开。我假设我有[100, 200, "boxes"]。现在在python中,我可以通过提供一系列索引来访问我需要的元素,如[0:1]

如何在Java中做同样的事情?

for (String line : mydata.split("\n|\r\n")) { 

      String[] sl = line.split(" |\t"); 
      String[] my_two_elements = sl[0:1]; <-- No way! 

     } 
+2

它应该是'TreeMap '。关键是地图中的第一个参数类型。 – manouti

+0

我建议你重新提出问题标题,因为它很混乱。 –

+0

你想要一个字符串或一个字符串[] - 数组作为结果吗? – lenhuy2106

回答

0

您正在寻找Arrays.copyOfRange(array,from,to);

复制指定的数组的指定范围的新数组。 范围的起始索引(from)必须位于零和 original.length之间,包括在内。原始[来自]的值被放入副本的初始元素 (除非== === original.length或从== ==到 )。原始数组中随后元素的值是 ,放置在副本中的后续元素中。 范围(to)的最终索引必须大于或等于from,可能是 大于original.length,在这种情况下null将放置在索引大于或等于该索引的副本的所有 元素中到 original.length - from。返回数组的长度将从 - 。

结果数组与原始 数组完全相同。

始终参考源的实现细节和配置代码的性能。

3035 public static <T,U> T[] More ...copyOfRange(U[] original, int from, int to, Class<? extends T[]> newType) { 
3036  int newLength = to - from; 
3037  if (newLength < 0) 
3038   throw new IllegalArgumentException(from + " > " + to); 
3039  T[] copy = ((Object)newType == (Object)Object[].class) 
3040   ? (T[]) new Object[newLength] 
3041   : (T[]) Array.newInstance(newType.getComponentType(), newLength); 
3042  System.arraycopy(original, from, copy, 0, 
3043       Math.min(original.length - from, newLength)); 
3044  return copy; 
3045 } 
+0

是否足够有效在每个循环上创建一个新数组?想象一下我有10k次迭代? – minerals