简而言之,这几乎是我需要的代码来在第四个和最后一个输入上强制转换IllegalArgumentException并打印出错误的输入[]
我最成功的尝试是使代码在[2]输出和[1、2]输出之后打印出错误的input []。
当前输出为
Sub CopyRows()
Dim r_users_a As Range, r_acess_a As Range, r_users_b As Range, r_acess_b As Range, r_users_c As Range, r_acess_c As Range
Dim count As Integer
count = 0
Set r_users_a = Range("D3:D5")
Set r_acess_a = Range("E3:E5")
Set r_users_b = Range("H3:H5")
Set r_acess_b = Range("I3:I5")
Set r_users_c = Range("P3:P5")
Set r_acess_c = Range("Q3:Q5")
For Each cell In r_users_a
For Each cellB In r_users_b
If cell.Value = cellB.Value Then
Cells(r_users_c.Row + count, r_users_c.Column).Value = cell.Value
Cells(r_users_c.Row + count, r_users_c.Column + 1).Value = Cells(cellB.Row, cellB.Column + 1).Value + Cells(cell.Row, cell.Column + 1).Value
count = count + 1
End If
Next cellB
Next cell
End Sub
但我需要成为现实
[6, 8, 9, 10]
[1002]
empty array []
[2]
Bad input[]
Bad input[]
[1, 2]
下面的完整代码。
[6, 8, 9, 10]
[1002]
empty array []
Bad input[]
Bad input[]
Bad input[]
Bad input[]
答案 0 :(得分:1)
我个人会这样做:
第1步:删除所有空格:
// Remove all spaces from the input:
s = s.replaceAll("\\s", "");
第2步:验证输入是否为空。如果是,请打印并返回。
// Is the input empty? Return an empty array
if(s.isEmpty()){
System.out.print("empty array ");
int[] emptyArray = {};
return emptyArray;
}
第3步:验证输入的内容是单个数字还是多个用逗号分隔的数字。如果不是,请打印并返回。
// Is the input not valid? Return a bad result
if(!s.matches("(\\d+,)*\\d+")){
System.out.print("Bad input ");
int[] emptyArray = {};
return emptyArray;
}
步骤4:现在我们确定输入是有效的。因此我们可以用逗号(,
)分割输入并创建整数数组。可以使用您已经拥有的Scanner
完成此操作,尽管我个人会使用String[] strArray = s.split(",");
然后将此String
数组转换为int
数组。
您的Scanner
如下所示:
// Determine the length of the array:
int arraylength = 0;
Scanner scan = new Scanner(s).useDelimiter(",");
while(scan.hasNextInt()){
scan.nextInt(); // Discard the integer
arraylength++;
}
// Fill the result-array:
int[] intArray = new int[arraylength];
int index = 0;
Scanner scan2 = new Scanner(s).useDelimiter(",");
while(scan2.hasNextInt()){
intArray[index] = scan2.nextInt();
index++;
}
return intArray;
作为参考,这里可能没有Scanner
:
String[] strArray = s.split(",");
int arrayLength = strArray.length;
int[] intArray = new int[arrayLength];
for(int index = 0; index < arrayLength; index++){
// No need to try-catch the ParseException, since we already validated the String above
intArray[index] = Integer.parseInt(strArray[index]);
}
return intArray;
答案 1 :(得分:0)
只需将.useDelimiter(" *, *")
更改为.useDelimiter(",");
答案 2 :(得分:0)
它需要比您使用过的正则表达式。
这是我的方法
1)我将使用Pattern编译正则表达式(Scanner.useDelimiter内部使用已编译的Pattren)
^\\s*(\\d+(\\s*,\\s*\\d+)*)?\\s*$
2)我将检查字符串中的正则表达式是否匹配。
3)如果匹配项检查空字符串,则返回空数组。
4)如果不通过逗号分隔来分割字符串并将元素放置在int数组中(请不要忘记修剪分割的字符串)
public static Pattern ARRAY_PATTREN = Pattern
.compile("^\\s*(\\d+(\\s*,\\s*\\d+)*)?\\s*$");
public static int[] getArray(String str) {
int[] emptyArray = {};
Matcher match = ARRAY_PATTREN.matcher(str);
if (match.matches()) {
if (str.length() > 0) {
String[] arr = str.split(",");
int[] intarray = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
intarray[i] = Integer.parseInt(arr[i].trim());
}
return intarray;
}
} else {
System.out.print("empty array ");
}
return emptyArray;
}