有没有办法从字符串中提取一个由某个字符分隔的值?

时间:2015-08-18 13:07:36

标签: java android string

我的应用程序读取包含纯文本的NFC标记的值,然后将读取的字符串向上剪切。 字符串应如下所示: “R = V; B = V; G = V; N = V; P = V; M = V; S = V” 我想读“v”字符,因为它们除以;性格,我记得有一个功能,让我分割这样的字符串,我该怎么做? v值不是常数,它可以跨越1个位置,就像它可以跨越3或4.该应用程序适用于Android手机,在Android Studio上用Java编写。

4 个答案:

答案 0 :(得分:2)

Java在String上有一个split函数。 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

所以你可以使用split(“;”);

答案 1 :(得分:2)

您询问字符串方法.split()

它将字符串拆分为数组,所以对于你的问题,因为split可以使用正则表达式,你可以精确地分割所需的模式 像这样:

String givenString="r=v;b=v;g=v;n=v;p=v;m=v;s=v";
        String[]vs=givenString.split("([;]?[a-z]{1}[=])");
        for(String v: vs){System.out.println(v);}//prints all v

正则表达式解释:

  1. [;]? - >意味着可以从一个分号开始,或者没有
  2. [a-z] {1} - >仅指一个字母的小写
  3. [=] - >意味着等于标志
  4. 编辑:如果您只使用分号分隔(如@cvester建议的那样),您将获得整个条目字符串,例如:“r = v”,“b = v”等。 。 在这种情况下,您可以迭代所有条目,然后再按等于“=”进行一次拆分,如下所示:

    String []entries=givenString.split(";");
            for (String entry:entries){
                String []vs=entry.split("=");
                System.out.println(vs[1]);//prints all v
            }
    

答案 2 :(得分:0)

使用String#split()或者您可以创建自己的逻辑。

String string = "r=v;b=asfasv;g=v;n=asf;p=v;m=v;s=vassaf";
    String word = "";
    int i = 0;
    ArrayList<String> list = new ArrayList();
    while(i < string.length())
    {
      if(string.charAt(i) == '=')
       {
           i++;
         while( i < string.length() && string.charAt(i) != ';' )
            {
              word += string.charAt(i);
              i++;
            }
         list.add(word);
         System.out.println(word);
         word = "";
       } 
      i ++;
    }
    if(!word.equals(""))
     list.add(word);

    System.out.println(list);

答案 3 :(得分:0)

您可以使用正则表达式来避免循环

String input = "r=v;b=v;g=v;n=v;p=v;m=v;s=v";
input.trim().replaceAll("([a-zA-Z]=)+","").replaceAll(";",""));