java 正则匹配String字符串截取问题。
答案:5 悬赏:0 手机版
解决时间 2021-11-07 13:57
- 提问者网友:饥饿走向夜
- 2021-11-06 22:55
java 正则匹配String字符串截取问题。
最佳答案
- 五星知识达人网友:孤老序
- 2021-11-07 00:20
1、首先,数字格式化:将空格替换为‘,’,还是将‘,’替换为空格都可以;
2、其次,了解各个数据的特征:表示颜色的都有‘色’,表示包装的都有‘/’,剩下的就是规格
3、最后,截取信息:在字符串中找到特征字符(‘色’、‘/’),特征字符到最近的前一个分隔符和后一个分隔符之间的数据就是想要的数据;
public static void main(String[] args) {
String src = "彩色 10包/箱 12袋/包,11行";
String s1 = src.replaceAll(",", " ");
String[] ss = s1.split(" ");
StringBuffer yanse = new StringBuffer() ;
StringBuffer guige = new StringBuffer() ;
StringBuffer baozhuang = new StringBuffer() ;
for(String s2:ss){
if(s2.indexOf("色")>0){
yanse.append(s2).append(",");
}else if(s2.indexOf("/")>0){
baozhuang.append(s2).append(",");
}else{
guige.append(s2).append(",");
}
}
yanse.deleteCharAt(yanse.length()-1);
guige.deleteCharAt(guige.length()-1);
baozhuang.deleteCharAt(baozhuang.length()-1);
System.out.println("颜色:"+yanse.toString());
System.out.println("包装:"+baozhuang.toString());
System.out.println("规格:"+guige.toString());
}追问yanse.deleteCharAt(yanse.length()-1);
guige.deleteCharAt(guige.length()-1);
baozhuang.deleteCharAt(baozhuang.length()-1);
你好,你这个减一为了什么呢???有颜色没有的情况下会报数组越界追答去掉末尾的“,”,一个字符串“12345678,”长度为9,但是字符在字符串中的位置是从0开始的,所以最后一个字符“,”在字符串中的位置是字符串的长度减1,也就是9-1=8,确实,如果有某类没有的话会越界,那在删除最后一个字符之前加一个判断就行了,比如:
if(null != yanse && 0 < yanse.length()){
yanse.deleteCharAt(yanse.length()-1);
}
其他的也做相同的处理就行了
2、其次,了解各个数据的特征:表示颜色的都有‘色’,表示包装的都有‘/’,剩下的就是规格
3、最后,截取信息:在字符串中找到特征字符(‘色’、‘/’),特征字符到最近的前一个分隔符和后一个分隔符之间的数据就是想要的数据;
public static void main(String[] args) {
String src = "彩色 10包/箱 12袋/包,11行";
String s1 = src.replaceAll(",", " ");
String[] ss = s1.split(" ");
StringBuffer yanse = new StringBuffer() ;
StringBuffer guige = new StringBuffer() ;
StringBuffer baozhuang = new StringBuffer() ;
for(String s2:ss){
if(s2.indexOf("色")>0){
yanse.append(s2).append(",");
}else if(s2.indexOf("/")>0){
baozhuang.append(s2).append(",");
}else{
guige.append(s2).append(",");
}
}
yanse.deleteCharAt(yanse.length()-1);
guige.deleteCharAt(guige.length()-1);
baozhuang.deleteCharAt(baozhuang.length()-1);
System.out.println("颜色:"+yanse.toString());
System.out.println("包装:"+baozhuang.toString());
System.out.println("规格:"+guige.toString());
}追问yanse.deleteCharAt(yanse.length()-1);
guige.deleteCharAt(guige.length()-1);
baozhuang.deleteCharAt(baozhuang.length()-1);
你好,你这个减一为了什么呢???有颜色没有的情况下会报数组越界追答去掉末尾的“,”,一个字符串“12345678,”长度为9,但是字符在字符串中的位置是从0开始的,所以最后一个字符“,”在字符串中的位置是字符串的长度减1,也就是9-1=8,确实,如果有某类没有的话会越界,那在删除最后一个字符之前加一个判断就行了,比如:
if(null != yanse && 0 < yanse.length()){
yanse.deleteCharAt(yanse.length()-1);
}
其他的也做相同的处理就行了
全部回答
- 1楼网友:煞尾
- 2021-11-07 03:49
String str="你所言处理的字符串";
String[] tem=str.split(" ");或者String[] tem=str.split(",");
分开了处理追问现在已经分来了,分开之后呢,怎么再分开,颜色,规格,。。。。。谢谢追答同样的办法,分开后的数组tem里不都是字符串吗,拿出来根据需要继续分呢
String[] tem=str.split(" ");或者String[] tem=str.split(",");
分开了处理追问现在已经分来了,分开之后呢,怎么再分开,颜色,规格,。。。。。谢谢追答同样的办法,分开后的数组tem里不都是字符串吗,拿出来根据需要继续分呢
- 2楼网友:怙棘
- 2021-11-07 02:25
String str=“ A4,80列,三层,带双列线,二等分 白色 1200页/箱 ,10箱/包 ” ;
String[] value=str.split("\\s");//按空格截取
规格=value[0];
颜色=value[1]
包装=value[2]
String[] value=str.split("\\s");//按空格截取
规格=value[0];
颜色=value[1]
包装=value[2]
- 3楼网友:杯酒困英雄
- 2021-11-07 01:01
这种问题的思路就是要把你的数据格式化,比如将每行的所有 逗号 String.replaceAll(“,”,“ ”);替换成空格,以空格作为分隔符分割每行的数据,得到数组,素组再拼接成需要的字符串,肯定能解决此类问题。不规则的数据无非就是增加了很多判断追问您的意思是,把每条数据的“,”全部替换为空格,然后空格分隔开,得到很多数组,再分别判断每个数组中有没有想要的数据,有的话就拼接成想要的字符串???? 是的,这样的话判断需要很多啊。追答你的数据是分条的,在截取每一条的时候,换行符分割得到的,在执行这层循环的时候就要判断里面的颜色属性的index,颜色属性得到之后,其他的属性都能得到了。颜色属性都在中间,可采用二分法判断
- 4楼网友:梦中风几里
- 2021-11-07 00:48
累坏了我,不知道对不对呀
function rookitReg(str){
var regex1 = /d+页|d+页,+|(.)*(?=[u4e00-u9fa5]{1}色)|(.)*(?=,[u4e00-u9fa5]{1}色)/g;
var regex2 = /[u4e00-u9fa5]+色s+/g;
var regex3 = /d*[u4e00-u9fa5]/[u4e00-u9fa5]s*,?.*/g;
//str = "A4,80列,三层,带双列线,二等分 白色 1200页/箱 ,10箱/包 ";
//str = "A4,80列,三层,二等分 彩色 1200页/箱 ";
//str = "210毫米*30码 白色 12卷/箱 ";
//str = "白色,300页,36包/箱,107*96毫米 ";
//str = "37*91毫米,300页 白色 18本/包,4包/箱";
//str = "147*101毫米,白色 48包/箱";
str = "147*101毫米,300页,银色外壳 白色 24盒/包,4包/箱";
alert(str.match(regex2));
};
function rookitReg(str){
var regex1 = /d+页|d+页,+|(.)*(?=[u4e00-u9fa5]{1}色)|(.)*(?=,[u4e00-u9fa5]{1}色)/g;
var regex2 = /[u4e00-u9fa5]+色s+/g;
var regex3 = /d*[u4e00-u9fa5]/[u4e00-u9fa5]s*,?.*/g;
//str = "A4,80列,三层,带双列线,二等分 白色 1200页/箱 ,10箱/包 ";
//str = "A4,80列,三层,二等分 彩色 1200页/箱 ";
//str = "210毫米*30码 白色 12卷/箱 ";
//str = "白色,300页,36包/箱,107*96毫米 ";
//str = "37*91毫米,300页 白色 18本/包,4包/箱";
//str = "147*101毫米,白色 48包/箱";
str = "147*101毫米,300页,银色外壳 白色 24盒/包,4包/箱";
alert(str.match(regex2));
};
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯