请高手指点
一个字符串格式如下:string = "a=0|b=xxx|c=xxx|d=|e=|f=xxx";
其中a,b,c,d,e,f的值可以为空,要获取a,b,c,d,e,f的值,怎样处理比较好?
我的实现如下:
                  String string = "a=0|b=xxx|c=xxx|d=|e=|f=xxx";
                  String a = null;
String b = null;
String c = null;
String d = null;
String e = null;
                   String f = null;
                  String[] content = string.split("\\|");
for(int i=0;i<content.length;i++){
String[] express = content[i].trim().split("=");
if(content[i].contains("=") && express.length <= 2){
if("a".equals(express[0])){
if(express.length == 1){
a = "";
}else{
a = express[1];
}
}else if("b".equals(express[0])){
if(express.length == 1){
b = "";
}else{
b = express[1];
}
}else if("c".equals(express[0])){
if(express.length == 1){
c = "";
}else{
c = express[1];
}
}else if("d".equals(express[0])){
if(express.length == 1){
d = "";
}else{
d = express[1];
}
}else if("e".equals(express[0])){
if(express.length == 1){
e = "";
}else{
e = express[1];
}
}else if("f".equals(express[0])){
if(express.length == 1){
f = "";
}else{
f = express[1];
}
}
}
                   }

解决方案 »

  1.   

    a=0|b=xxx|c=xxx|d=|e=|f=xxx你的字符串是按照abcdef顺序的么 ?就是 第一个|前肯定是a ,第二个|前是b...?
      

  2.   

    String str = "a=0|b=xxx|c=xxx|d=|e=|f=xxx";
    String[] str1 = str.split("\\|");
    for (String s : str1) {
    System.out.println(s.length() <= 2 ? null : s.split("=")[1]);
    }不知道满不满足你说的、
      

  3.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class Test1 { public static void main(String[] args) {
    String str = "a=0|b=XXX|c=2|d=|e=|f=MMM";
     String regEx= "[a=,b=,c=,d=,e=,f=]" ;
    Pattern   p   =   Pattern.compile(regEx);       
            Matcher   m   =   p.matcher(str);       
            System.out.println(m.replaceAll("").trim()); 
            String str1 = m.replaceAll("").trim() ;
    String[] strArr = str1.split("\\|") ;
    for (int i = 0; i < strArr.length; i++){
    System.out.println(i + "、 " + strArr[i]) ;
    }
    }
    }0|XXX|2|||MMM
    0、 0
    1、 XXX
    2、 2
    3、 
    4、 
    5、 MMM
      

  4.   


    import java.util.HashMap;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Message {
    public static void main(String args[]){
    String string="a=0|b=xxx|c=xxx|d=|e=|f=xxx";
    HashMap<String,String> map =new HashMap<String,String>();
    String[] temp = new String[2];
    Pattern p = Pattern.compile("([^\\|]*)=([^\\|]*)");
    Matcher m = p.matcher(string);
    while(m.find()){
    temp[0]=m.group(1);
    temp[1]=m.group(2);
    System.out.println(temp[0]+"="+temp[1]);
    map.put(temp[0], temp[1]);
    } System.out.println(map);
    }
    }
    //运行结果
    a=0
    b=xxx
    c=xxx
    d=
    e=
    f=xxx
    {f=xxx, d=, e=, b=xxx, c=xxx, a=0}
      

  5.   

    字符串的顺序不一定,最后也不要求要按顺序获得值,只要获得字符a,b,c,d,e,f的值即可!
      

  6.   

    我要可以根据字符a,b,c,d,e,f来获取其相应的值!
    我的办法是先新建字符串变量a,b,c,d,e,f,然后把字符串处理后的值赋给它们,这样做效率肯定很低,需要先匹配新建的字符串变量与原字符串截取的字符是否相当,要是相当就赋值!
    5楼的哥们sdojqy1122给的解决办法应该挺好,用Map来实现!
      

  7.   

    我的实现方式很笨,这样做可以么?
    class StringTest{
    public static void main(String[] arg){
    String string = "a=0|b=xxx|c=xxx|d=|e=|f=xxx"; 
    String a = null;
    String b = null;
    String c = null;
    String d = null;
    String e = null;
    String f = null;
    String[] content = string.split("\\|");
    for(int i=0;i<content.length;i++){
    String[] express = content[i].trim().split("=");
    if(content[i].contains("=") && express.length <= 2){
    if("a".equals(express[0])){
    if(express.length == 1){
    a = "";
    }else{
    a = express[1];
    }
    }else if("b".equals(express[0])){
    if(express.length == 1){
    b = "";
    }else{
    b = express[1];
    }
    }else if("c".equals(express[0])){
    if(express.length == 1){
    c = "";
    }else{
    c = express[1];
    }
    }else if("d".equals(express[0])){
    if(express.length == 1){
    d = "";
    }else{
    d = express[1];
    }
    }else if("e".equals(express[0])){
    if(express.length == 1){
    e = "";
    }else{
    e = express[1];
    }
    }else if("f".equals(express[0])){
    if(express.length == 1){
    f = "";
    }else{
    f = express[1];
    }

    }
    }
    System.out.println("a is : "+a);
    System.out.println("b is : "+b);
    ...
    }
    }
    另外正则表达式:([^\\|]*)=([^\\|]*)是什么意思?
      

  8.   

    ([^\\|]*)=([^\\|]*)
    这个表示不以 |结尾的字符串
    例如
    a=0|b=xxx|c=xxx|d=|e=
    ([^\\|]*)获取到a,=获取到=号 ,([^\\|]*)没有获取到东西,因为后面是|这个,应该是空串"";
    因为temp[1]!=null,所以把("a","")传入map中
      

  9.   

    十分感谢!之前接触过一点点正则表达式,很强大啊!
    我是现在的代码如下:class StringTest{
    public static void main(String[] arg){
    String string = "a=0|b=xxx|c=xxx|d=|e=|f=xxx"; 
    String a = null;
    String b = null;
    String c = null;
    String d = null;
    String e = null;
    String f = null;
    String[] content = string.split("\\|");
    for(int i=0;i<content.length;i++){
    String[] express = content[i].trim().split("=");
    if(content[i].contains("=") && express.length <= 2){
    if("a".equals(express[0])){
    if(express.length == 1){
    a = "";
    }else{
    a = express[1];
    }
    }else if("b".equals(express[0])){
    if(express.length == 1){
    b = "";
    }else{
    b = express[1];
    }
    }else if("c".equals(express[0])){
    if(express.length == 1){
    c = "";
    }else{
    c = express[1];
    }
    }else if("d".equals(express[0])){
    if(express.length == 1){
    d = "";
    }else{
    d = express[1];
    }
    }else if("e".equals(express[0])){
    if(express.length == 1){
    e = "";
    }else{
    e = express[1];
    }
    }else if("f".equals(express[0])){
    if(express.length == 1){
    f = "";
    }else{
    f = express[1];
    }

    }
    }
    System.out.println("a is : "+a);
    System.out.println("b is : "+b);
    //...
    }
    }这次这个代码显示正确了吧