我有一个将int数组转换为String的转换器。
**EDIT** [1, 2, -45, 678] -> "1 2 -45 678";
[1] -> "1"
在这个转换器中,我有一个supportFromString
方法来识别字符串是否可以转换回数组。
我虽然使用正则表达式这样做,但我找不到一个好的匹配。
我尝试了"\\d+\\s"
和"[\\d+]\\s"
,但s.matches(pattern)
返回false。
有什么建议吗?如果找到一个非数字字符,则它无效。
修改 这是转换器的toString方法
@Override
public String toString(Object o, ConverterContext converterContext) {
StringBuilder builder = new StringBuilder();
for (Integer integer : ((Integer[]) o)) {
if (builder.toString().length() > 0) {
builder.append(" ");
}
builder.append(integer);
}
return builder.toString();
}
答案 0 :(得分:2)
我会针对以下正则表达式测试字符串:
[^\d ]
如果您得到任何结果,则表示您拥有除数字(\ d)或空格
之外的其他内容答案 1 :(得分:1)
试试这段代码:
String pattern = "(-?\\d+\\s*)+";
String test = "1 -5 2 45 678";
System.out.println(test.matches(pattern));
<强>输出强>
真
如果要查找数字,请单独使用此模式:-?\\d+\\s*
。
答案 2 :(得分:1)
static Pattern validPattern = Pattern.compile("^(\\-{0,1}\\d+\\s)*(\\-){0,1}\\d+$");
public static void main(String[] args) {
isStringValid("1 2 3 4 5");
isStringValid("1 26 35 44 53");
isStringValid("1 2a 3s 4 5");
isStringValid("1234");
isStringValid("1");
isStringValid("1 ");
isStringValid("a b c");
isStringValid("1 b c");
isStringValid("1 1 2 33333");
isStringValid("-1 1 2 33333");
isStringValid("1 1 2 -33333");
isStringValid("1 1 2 ----33333");
isStringValid("---1 1 2 -33333");
}
public static boolean isStringValid(String s){
s = s.trim();
boolean b = validPattern.matcher(s).find();
if (b){
System.out.printf("%s: is valid.\n", s);
}else{
System.out.printf("%s: is NOT valid.\n", s);
}
return(b);
}
结果:
1 2 3 4 5: is valid.
1 26 35 44 53: is valid.
1 2a 3s 4 5: is NOT valid.
1234: is valid.
1: is valid.
1: is valid.
a b c: is NOT valid.
1 b c: is NOT valid.
1 1 2 33333: is valid.
-1 1 2 33333: is valid.
1 1 2 -33333: is valid.
1 1 2 ----33333: is NOT valid.
---1 1 2 -33333: is NOT valid.
答案 3 :(得分:0)
这是你可以用来测试字符串是否是一个数字的正则表达式,可选地后跟一个或多个空格分隔的其他数字:
"(0|-?[1-9][0-9]*)(\\s+(0|-?[1-9][0-9]*))*"
编辑:包含负整数并排除前导零。
答案 4 :(得分:0)
这是我的处理,处理负数。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Arrays;
/**
<P>java IntArrayToStringToIntArray</P>
**/
public class IntArrayToStringToIntArray {
private static final Pattern pDigits = Pattern.compile("-?\\d+");
public static final void main(String[] igno_red) {
String sArray = Arrays.toString(new int[]{1, 2, -45, 678});
System.out.println("---The array: " + sArray);
System.out.println(isSafeToConvertToStringedArrayToIntArray(sArray));
int[] ai = getIntArrayFromToStringedArray(sArray);
for(int i : ai) {
System.out.println(i);
}
System.out.println();
sArray = Arrays.toString(new int[]{1});
System.out.println("---The array: " + sArray);
System.out.println(isSafeToConvertToStringedArrayToIntArray(sArray));
ai = getIntArrayFromToStringedArray(sArray);
for(int i : ai) {
System.out.println(i);
}
System.out.println();
sArray = "bogus";
System.out.println("---The array: " + sArray);
System.out.println(isSafeToConvertToStringedArrayToIntArray(sArray));
}
//Assumes the string is formatted as if by Arrays.toString(int[])
public static final boolean isSafeToConvertToStringedArrayToIntArray(String s_ofInts) {
//Eliminate the surrounding square brackets
s_ofInts = s_ofInts.substring(1, s_ofInts.length() - 1);
String[] as = s_ofInts.split(", ");
for(String s : as) {
Matcher m = pDigits.matcher(s);
if(!m.matches()) {
return false;
}
}
return true;
}
//Assumes the string is formatted as if by Arrays.toString(int[])
public static final int[] getIntArrayFromToStringedArray(String s_ofInts) {
//Eliminate the surrounding square brackets
s_ofInts = s_ofInts.substring(1, s_ofInts.length() - 1);
String[] as = s_ofInts.split(", ");
int[] ai = new int[as.length];
for(int i = 0; i < as.length; i++) {
String s = as[i];
Matcher m = pDigits.matcher(s);
if(m.matches()) {
ai[i] = Integer.parseInt(s);
} else {
throw new IllegalArgumentException("getIntArrayFromToStringedArray: Element " + i + " in s_ofInts is not an int: \"" + s + "\".");
}
}
return ai;
}
}
答案 5 :(得分:-1)
你可以从扫描器读取整个输入行,然后拆分行,然后你有一个String [],将每个数字解析为int [],索引一对一匹配(假设有效输入,没有NumberFormatExceptions),如< br /> String line = scanner.nextLine();
String [] numberStrs = line.split(“,”);
int [] numbers = new int [numberStrs.length];
for(int i = 0; i&lt; numberStrs.length; i ++)
{
numbers [i] = Integer.parseInt(numberStrs [i]);
}