关于ArrayList的问题,经典的实际问题×××好礼相送××× 解析字符串,然后生成相应的ArrayList。解决不难。只是,你这样做的目的是什么?练习?如果是在解决实际问题,可能你的设计方案就得重新考虑了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以采用xml格式,会更好。 是啊,以你知己想要的方式解吸字符串。这样做的意义在哪里呢?web 和java 数据定义比较好。。赞同 写错了用xml 与 java 这样的格式比较好。 看看 totodo(是时候了,小土豆仙) 的建议,很有道理的.首先确认你这么做的合理性,在我们大家看来,是一种无用功. 你现在已经有一个ArrayList的聚集了,为什么要转换为String呢? 如果是为了分布式程序的数据传输, ArrayList实现了Serializable接口,完全可以通过RMI或者java-over-iiop的形式来传输.当然你如果坚持需要转化为String, 那么使用基于XML的方式是最好的选择. public class Test{ public static String compressSpace(String s) { String ss=""; for(int i=0;i<s.length();i++) if (s.charAt(i)!=' ') ss+=s.charAt(i); return ss; } public static String[] getSplitedString(String words,String token) { java.util.Vector v = new java.util.Vector(); java.util.StringTokenizer st = new java.util.StringTokenizer(words,token); while (st.hasMoreElements()) { v.add(st.nextElement()); } String[] a=new String[v.size()]; v.toArray( a ); return a; } public static String getElement(String s) { return s.substring(1,s.indexOf("]")); } public static java.util.ArrayList loadIntoArrayList(String s) { s = compressSpace(s)+","; s = s.substring(1,s.length()-1); System.out.println(s); java.util.ArrayList m =new java.util.ArrayList(); while(s.indexOf('[')>=0) { String e = getElement( s ); s = s.substring(s.indexOf(']')+2); String[] _mm = getSplitedString(e,","); java.util.ArrayList mm = new java.util.ArrayList(); for(int i=0;i<_mm.length;i++) mm.add(_mm[i]); m.add(mm); } return m; } public static void main(String[] args) { String s = "[[0, 0, 0], [3, 2, 1], [6, 4, 2], [9, 6, 3], [12, 8, 4]]"; java.util.ArrayList m = loadIntoArrayList(s); System.out.println(m); }} loadIntoArrayList(s)接收字符串"[[0, 0, 0], [3, 2, 1], [6, 4, 2], [9, 6, 3], [12, 8, 4]]"。返回ArrayList 真的有热心人为楼主实现了!我也热心一番.给 "feiyuegaoshan(飞跃)" 的实现做了单元测试,代码如下:public class TestTest extends TestCase { public TestTest(String name) {super(name);} public void testConversion() { String correctStr = "[[0, 0, 0], [3, 2, 1], [6, 4, 2], [9, 6, 3], [12, 8, 4]]"; ArrayList list = Test.loadIntoArrayList(correctStr); assertNotNull(list); assertEquals(correctStr, list.toString()); ArrayList newList = Test.loadIntoArrayList(list.toString()); assertEquals(list, newList); String invalidStr = "foo"; list = Test.loadIntoArrayList(invalidStr); assertNull(list); list = Test.loadIntoArrayList(null); assertNull(list); }}运行结果能够说明 "feiyuegaoshan(飞跃)" 的实现是正确的,但是没有处理边界情况.处理的字符串没有做有效性判断,楼主如果要采用,记着自己要处理. 字符串在字符串数组中出现的次数? 手机号码中间几位的隐藏 java连数据的小菜问题!望高手指教,小弟感激不尽! 几道小小的题目一起和大家更进一步的了解 Java (Ⅱ) 请问如何解决这个问题 org.aspectj.weaver.tools.Jdk14Trace error 立贴,看看自己一年后能学到些什么知识。 大家帮我看看这个程序~ 为什么我这样的代码会有这样的警告 如何从服务器的jsp页面上下载文件到客户机上 ? 如何使用rmi技术实现集群 一个零件由一个厂家生产,一个厂家生产多种零件,画出E-R图 发邮件问题:如何发送html页面
当然你如果坚持需要转化为String, 那么使用基于XML的方式是最好的选择.
public class Test
{
public static String compressSpace(String s)
{
String ss="";
for(int i=0;i<s.length();i++)
if (s.charAt(i)!=' ')
ss+=s.charAt(i);
return ss;
}
public static String[] getSplitedString(String words,String token)
{
java.util.Vector v = new java.util.Vector();
java.util.StringTokenizer st = new java.util.StringTokenizer(words,token);
while (st.hasMoreElements())
{
v.add(st.nextElement());
}
String[] a=new String[v.size()];
v.toArray( a );
return a;
}
public static String getElement(String s)
{
return s.substring(1,s.indexOf("]"));
}
public static java.util.ArrayList loadIntoArrayList(String s)
{
s = compressSpace(s)+",";
s = s.substring(1,s.length()-1);
System.out.println(s);
java.util.ArrayList m =new java.util.ArrayList();
while(s.indexOf('[')>=0)
{
String e = getElement( s );
s = s.substring(s.indexOf(']')+2);
String[] _mm = getSplitedString(e,",");
java.util.ArrayList mm = new java.util.ArrayList();
for(int i=0;i<_mm.length;i++)
mm.add(_mm[i]);
m.add(mm);
}
return m;
}
public static void main(String[] args) {
String s = "[[0, 0, 0], [3, 2, 1], [6, 4, 2], [9, 6, 3], [12, 8, 4]]";
java.util.ArrayList m = loadIntoArrayList(s);
System.out.println(m);
}}
public class TestTest extends TestCase {
public TestTest(String name) {super(name);} public void testConversion() {
String correctStr = "[[0, 0, 0], [3, 2, 1], [6, 4, 2], [9, 6, 3], [12, 8, 4]]";
ArrayList list = Test.loadIntoArrayList(correctStr);
assertNotNull(list);
assertEquals(correctStr, list.toString());
ArrayList newList = Test.loadIntoArrayList(list.toString());
assertEquals(list, newList); String invalidStr = "foo";
list = Test.loadIntoArrayList(invalidStr);
assertNull(list); list = Test.loadIntoArrayList(null);
assertNull(list);
}
}
运行结果能够说明 "feiyuegaoshan(飞跃)" 的实现是正确的,但是没有处理边界情况.处理的字符串没有做有效性判断,楼主如果要采用,记着自己要处理.