【Java】String和List的相互转换

1.String转List

		String str = "red,blue,yellow";
        List<String> list = new ArrayList<>(Arrays.asList(str.split(",")));
        System.out.println("list---before:" + list);
        list.remove("red");
        System.out.println("list---after:" + list);

        List<String> list1 = Arrays.asList(str.split(","));
        System.out.println("list1---before:" + list1);
        list1.remove("red");
        System.out.println("list1---after:" + list1);

控制台打印结果:

	    list---before:[red, blue, yellow]
	    list---after:[blue, yellow]
	    list1---before:[red, blue, yellow]
	    Exception in thread "main" java.lang.UnsupportedOperationException
	    	at java.util.AbstractList.remove(AbstractList.java:161)
	    	at java.util.AbstractList$Itr.remove(AbstractList.java:374)
	    	at java.util.AbstractCollection.remove(AbstractCollection.java:293)
	    	at cn.avisoft.admin.Demo.main(Demo.java:18)

Arrays.asList()方法,查看源码可以发现,

	@SafeVarargs
    @SuppressWarnings("varargs")
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

返回一个ArrayList,但这里的ArrayList是java.util.Arrays.ArrayList,不是我们常用的java.util.ArrayList,它是Arrays类的一个内部类,声明如下:

	 public class ArrayList<E> extends AbstractList<E>
       		 implements List<E>, RandomAccess, Cloneable, java.io.Serializable

继承AbstractList类,它并没有实现add()和remove(),所以当我们调用remove()时,实际上调用的是AbstractList的remove(),

    public E remove(int index) {
            throw new UnsupportedOperationException();
        }

参数是索引,而非string,索引会抛出UnsupportedOperationException()异常。
所以需要将Arrays.asList()产生的List放入java.util.ArrayList中即可,即

	 List<String> list = new ArrayList<>(Arrays.asList(str.split(",")));

2.List转String

	 String s = String.join(",", list);
发布了35 篇原创文章 · 获赞 33 · 访问量 4947

猜你喜欢

转载自blog.csdn.net/wkw1598727534/article/details/94619254