Arrays.asList从字符串创建数组,然后省略数组中的第一个单词

时间:2014-04-29 16:27:24

标签: java arrays

我知道可能有其他方法可以解决这个问题,但我想尝试继续这种方式,我正在尝试使用字符串创建一个简单的列表,拆分为数组,并且我正在尝试获取输出为:

  

[A,B,C,D,E,F,G,H]

我正在使用带有键的HashMap放入数组,然后使用键“mode”从中获取数组列表

目前,我得到的输出是“[模式,A,B,C,D,E,F,G,H]”但我想省略结果中的键,但是我不想只需在输出上执行.split(“mode,”), 我想知道是否有一种方法可以改变原始字符串:

  

String test =“mode,A,B,C,D,E,F,G,H”;

所以我可以得到一个输出:

  

[A,B,C,D,E,F,G,H]

而不是:

[模式,A,B,C,D,E,F,G,H]

我真的想做什么..但是有同样的问题,我想用正则表达式来解决这个问题,这基本上是我从另一个人的代码中得到的想法 - 我对这里的正则表达式模式感到困惑,如果有人可以在模式的开头解释?< = ,这会有帮助

 public class Main {


    static final Map<String, LinkedList<String>> Modes = new HashMap<String, LinkedList<String>>(); 

    private final Pattern SET_DROPDN=Pattern.compile("(?<=\\s{0,10}set\\s{1,10}the\\s{0,10})(\\w+)\\s+(\\w+)", Pattern.CASE_INSENSITIVE);



    String test = "mode,A,B,C,D,E,F,G";


    public static void main(String[] args) {


        Main main = new Main();

        main.test(" set the mode E");  //
    }




    public void test(String s)
    {

        Matcher matcher = SET_DROPDN.matcher(s);


        if(matcher.find())
        {      


            String arg1 = matcher.group(1); 
            System.out.println("mx.group(1) = " + arg1);

            String arg2 = matcher.group(2);
            System.out.println("mx.group(2) = " + arg2);


            for(String st:test.split(","))
            {
                Modes.put(st, new LinkedList<String>(Arrays.asList(test.split(","))));                          
            }        

            List<String> vals = Modes.get(arg1);


            System.out.println("vals = " + vals);

            int idx = 0;

            for(String sg:vals)
            {

                if(sg.equals(arg2))
                {
                    break; //break out of this loop
                }

                idx++;


            }  

            System.out.println("Index for element = " + idx);
        }
    }

}

主要问题是我希望'A'的idx值为0而'E'的idx值应为4 - 但是'模式'的idx值为0

3 个答案:

答案 0 :(得分:1)

使用list.remove(0)从列表中删除第一个元素

List<String> vals = Modes.get("mode");
            vals.remove(0);

            System.out.println(vals);

使用此代码并检查输出

 String test = "mode,A,B,C,D,E,F,G,H";
         test = test.replaceAll("mode,", "");
         System.out.println(test);

答案 1 :(得分:0)

你也可以在guava库中使用filter方法过滤掉任何值..在这种情况下,它可以作为

List<String> filteredList = Lists.newArrayList(Collections2.filter(Arrays.asList(test.split(",")), Predicates.containsPattern("^\\w{1,1}$")));

这意味着它会将字符串拆分为列表并过滤掉长度大于1的任何单词。您可以调整模式以过滤掉任何内容。

答案 2 :(得分:0)

另一种方法是删除它之前的第一个元素和逗号:

String test = "mode,A,B,C,D,E,F,G,H";

int firstComma = test.indexOf(',');
String substring = test.substring(firstComma + 1);

System.out.println(substring); // this is the result