在java中把"12.3箱子5公斤", 转换成两个字符串数组{"12.3","5"}, {"箱子","公斤"}?

大哥们在线求帮请教下,在java中把"12.3箱子5公斤", 转换成两个字符串数组{"12.3","5"}, {"箱子","公斤"}?
最新回答
冰河铺子

2024-10-17 18:41:18

提供完整代码如下,已运行验证
思路:分离数字与非数字字符串
public static void main(String[] args) {
// TODO Auto-generated method stub
String s= "12.3箱子5公斤";
ArrayList<String> a = new ArrayList<String>();//这是数字字段集合
ArrayList<String> b = new ArrayList<String>();//这是非数字字段集合
String m = "";
int flag = 0;//0初始化 1之前是数字 2之前不是数字
for(int i=0;i<s.length();i++)
{
if(isNum(m,String.valueOf(s.charAt(i)))) {
if(flag == 2) {
b.add(m);
System.out.println("b add "+m);
m = "";
}
m += String.valueOf(s.charAt(i));
flag =1;
} else if(!isNum(m,String.valueOf(s.charAt(i)))) {
if(flag == 1) {
a.add(m);
System.out.println("a add "+m);
m = "";
}
m += String.valueOf(s.charAt(i));
flag =2;
}
}
if(isNum(m,"")) {
a.add(m);
System.out.println("a add "+m);
} else {
b.add(m);
System.out.println("b add "+m);
}
}

//判读是否数字
public static boolean isNum(String before,String now) {
try {
Double.parseDouble(now);
return true;
} catch (Exception e) {
// TODO: handle exception
}
try {
Double.parseDouble(before + now);
return true;
} catch (Exception e) {
// TODO: handle exception
}
return false;
}
小面包

2024-10-17 11:55:20

最好加一个分隔符 12.3箱子5公斤 写成12.3&箱子&5&公斤 , 然后用& 分开。 最后把string数组里面的[0],[2]放一个新数组里面,[1],[3]放一个新数组里面 就行了
追问
"12.3箱子5公斤" 是从sql里面的一个函数获取的,就是这个格式的。
继续逞强

2024-10-17 08:03:14

您好,提问者:
可以这样String.valueOf(12.3); 这样就转换成字符串类型的了。
追问
"12.3箱子5公斤" 是从sql里面的一个函数获取的,就是这个格式的。
追答
比如:String aa = "12.3箱子5公斤"; //数据库肯定是一个字符串
String aa = "12.3箱子5公斤"; //数据库肯定是一个字符串
String arr[] = new String[2];
String brr[] = new String[2];
String a1 = aa.substring((aa.lastIndexOf("箱子") - aa.lastIndexOf("箱子")),aa.lastIndexOf("箱子"));
String a2 = aa.substring(aa.indexOf("子")+1,aa.indexOf("公"));
String b1 = aa.substring(aa.indexOf("箱子"), aa.indexOf("箱子")+2);
String b2 = aa.substring(aa.indexOf("公斤"), aa.indexOf("公斤")+2);
arr[0] = a1;
arr[1] = a2;
brr[0] = b1;
brr[1] = b2;
System.out.println(java.util.Arrays.toString(arr));
System.out.println(java.util.Arrays.toString(brr));
就给你一个思路。程序需要优化下,你自己看看吧
在等一个康复日期

2024-10-17 11:46:13

处理任意数字+汉子组成的字符串
String r = "12.333看了看33浮点数";
String sStr = ",";
String t1 = r.replaceAll("[\u4e00-\u9fa5]+", sStr);
String t2 = r.replaceAll("((\\d+).(\\d+))|(\\d+)", sStr);
String[] arr1 = t1.split(sStr);
String[] arr2 = t2.substring(1).split(sStr);