【发布时间】:2017-01-07 07:25:52
【问题描述】:
如何从这样的字符串中获取字符串和 int 值:"a:10,b:15,c:20,d:30"
String mixedString = "a:10,b:15,c:20,d:30";
String requiredArray1[] = [a,b,c,d];
int requiredArray2[] = [10,15,20,20];
【问题讨论】:
标签: java arrays string integer
如何从这样的字符串中获取字符串和 int 值:"a:10,b:15,c:20,d:30"
String mixedString = "a:10,b:15,c:20,d:30";
String requiredArray1[] = [a,b,c,d];
int requiredArray2[] = [10,15,20,20];
【问题讨论】:
标签: java arrays string integer
您可以循环您的字符串并一一测试您的字符串:
第一
您需要将您的字符串拆分为:
String myString = "a:10,b:15,c:20,d:30";
//split the String to get only the Strings and int in your case you need to split with , and :
String mixedString[] = myString.split(":|\\,");
第二
测试如果String是Integer则返回true并将其插入Integers数组,否则将其插入Strings数组:
public static boolean test(String s){
try{
Integer i = Integer.parseInt(s);
return true;
}catch(Exception e){
return false;
}
}
你的程序应该是这样的:
public static void main(String[] args) {
String myString = "a:10,b:15,c:20,d:30";
String mixedString[] = myString.split(":|\\,");
String requiredArray1[] = new String[mixedString.length];
int requiredArray2[] = new int[mixedString.length];
int s = 0;
int n = 0;
for (int i = 0; i < mixedString.length; i++) {
if (!test(mixedString[i])) {
requiredArray1[s] = mixedString[i];
s++;
} else {
requiredArray2[n] = Integer.parseInt(mixedString[i]);
n++;
}
}
}
public static boolean test(String s) {
try {
Integer i = Integer.parseInt(s);
return true;
} catch (Exception e) {
return false;
}
}
【讨论】:
如果您的混合字符串如您在帖子中显示的那样,其中每个字母字符 总是 后跟冒号分隔符 (:),然后是数字值的字符串表示形式,那么您真的不需要需要一种额外的方法来测试是否存在数值。你只知道它在那里,就像你知道那里也有一个 alpha 值......或者......也许你不知道,也许你也应该测试 alpha。您没有在帖子中指定任何一种方式,混合字符串中可能存在哪些不同的可能性。因此,我们可以假设:
每个 alpha 部分都用冒号 (:) 分隔,然后是数字值的字符串表示形式,到目前为止,该数字值确实看起来是整数。然后是逗号 (,) 分隔符和另一个以冒号分隔的字母/数字对。
String mixedString = "a:10,b:15,c:20,d:30";
System.out.println("Original String: \"" + mixedString + "\"\n");
String[] mStringArray= mixedString.split(",");
String[] alphaArray = new String[mStringArray.length];
int[] numericArray = new int[mStringArray.length];
for (int i = 0; i < mStringArray.length; i++) {
String[] tmp = mStringArray[i].split(":");
alphaArray[i] = tmp[0];
numericArray[i] = Integer.parseInt(tmp[1]);
}
// Display contents of the two Arrays
System.out.println("Elements From Alpha Array");
for (int i = 0; i < alphaArray.length; i++) {
System.out.println(alphaArray[i]);
}
System.out.println("\nElements From Numeric Array");
for (int i = 0; i < numericArray.length; i++) {
System.out.println(numericArray[i]);
}
【讨论】:
public static void main(String[] args) {
String myString = "a:10,b:15,c:20,d:30";
// extract all numbers (All elements are numbers so you can convert it to int easily )
String[] requiredArray1 = extractAllAccordingToRegex("\\d+", myString);
// extract all characters
String[] requiredArray2 = extractAllAccordingToRegex("[a-zA-Z]+",myString);
}
static String[] extractAllAccordingToRegex(String inputRegex, String input) {
List<String> extractedItems = new ArrayList<String>();
Pattern reg = Pattern.compile(inputRegex);
Matcher m = reg.matcher(input);
while (m.find()) {
extractedItems.add(m.group());
}
return extractedItems.toArray(new String[1]);
}
【讨论】: