请高手指点
一个字符串格式如下: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];
}
}
}
}
一个字符串格式如下: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];
}
}
}
}
String[] str1 = str.split("\\|");
for (String s : str1) {
System.out.println(s.length() <= 2 ? null : s.split("=")[1]);
}不知道满不满足你说的、
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
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}
我的办法是先新建字符串变量a,b,c,d,e,f,然后把字符串处理后的值赋给它们,这样做效率肯定很低,需要先匹配新建的字符串变量与原字符串截取的字符是否相当,要是相当就赋值!
5楼的哥们sdojqy1122给的解决办法应该挺好,用Map来实现!
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);
...
}
}
另外正则表达式:([^\\|]*)=([^\\|]*)是什么意思?
这个表示不以 |结尾的字符串
例如
a=0|b=xxx|c=xxx|d=|e=
([^\\|]*)获取到a,=获取到=号 ,([^\\|]*)没有获取到东西,因为后面是|这个,应该是空串"";
因为temp[1]!=null,所以把("a","")传入map中
我是现在的代码如下: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);
//...
}
}这次这个代码显示正确了吧