如何区分实际字符串和整数值之间的 String[]?
How to make difference in String[] between real strings and integer values?
我正在开发一个应用
String[][] datos;
我需要为一种方法区分所有字符串和整数值。
例如:
datos[0][2]: "hi"
datos[1][1]: "3"
datos[2][2]: "a"
datos[3][0]: "25"
在这种情况下,我只需要 3 个和 25 个值,但我做不到
Integer.parseInt(datos[1][1]);
每个值。
在我的代码中我只做了特定的案例,但我想在第一个if语句中做所有的案例。
for(int f=2;f<maxf;f++)
for(int c=3;c<maxc;c++){
if((datos[f][c]!= "A")&&(datos[f][c]!= "-")&&(datos[f][c]!= "")){
nota= Integer.parseInt(datos[f][c]);
if(nota>3)
aprobados.set(f-2, aprobados.get(f-2)+1);
}
}
在旁边创建一个新方法:
public boolean isNumeric (String s){
try{
Double.parseDouble(s);
return true;
} catch (Exception e) {
return false;
}
}
如果可以转换,这将 return 为真,否则 returned
为假
使用 String[]
是错误的整体方法。相反,您应该使用自己的 Class,这样您就不必担心现在数组中的什么地方了。
我同意对混合数据使用 String[][]
的反对意见。
但是,如果 OP 没有选择,这里是测试程序的一个变体,展示了如何做:
public class Test {
public static void main(String[] args) {
int maxf = 4;
int maxc = 3;
String[][] datos = new String[maxf][maxc];
datos[0][2] = "hi";
datos[1][1] = "3";
datos[2][2] = "a";
datos[3][0] = "25";
for (int f = 0; f < maxf; f++)
for (int c = 0; c < maxc; c++) {
if (datos[f][c] != null) {
try {
int nota = Integer.parseInt(datos[f][c]);
System.out.println(nota);
} catch (NumberFormatException e) {
// Deliberately empty
}
}
}
}
}
您可以使用正则表达式“^[0-9]*$”检查字符串是否只包含数字。
我宁愿不使用异常捕获。我相信正则表达式匹配会更有效,像这样:
public static void main(String []args){
int maxf = 4;
int maxc = 3;
String[][] datos = new String[maxf][maxc];
datos[0][2] = "hi";
datos[1][1] = "3";
datos[2][2] = "a";
datos[3][0] = "25";
for(int f = 0; f < maxf; f++){
for(int c = 0; c < maxc; c++){
if(datos[f][c] != null && datos[f][c].matches("^[0-9]*$")){
int nota = Integer.parseInt(datos[f][c]);
System.out.println("datos[f][c] = " + nota);
// if(nota>3)
// aprobados.set(f-2, aprobados.get(f-2)+1);
}
}
}
}
我正在开发一个应用
String[][] datos;
我需要为一种方法区分所有字符串和整数值。 例如:
datos[0][2]: "hi"
datos[1][1]: "3"
datos[2][2]: "a"
datos[3][0]: "25"
在这种情况下,我只需要 3 个和 25 个值,但我做不到
Integer.parseInt(datos[1][1]);
每个值。
在我的代码中我只做了特定的案例,但我想在第一个if语句中做所有的案例。
for(int f=2;f<maxf;f++)
for(int c=3;c<maxc;c++){
if((datos[f][c]!= "A")&&(datos[f][c]!= "-")&&(datos[f][c]!= "")){
nota= Integer.parseInt(datos[f][c]);
if(nota>3)
aprobados.set(f-2, aprobados.get(f-2)+1);
}
}
在旁边创建一个新方法:
public boolean isNumeric (String s){
try{
Double.parseDouble(s);
return true;
} catch (Exception e) {
return false;
}
}
如果可以转换,这将 return 为真,否则 returned
为假使用 String[]
是错误的整体方法。相反,您应该使用自己的 Class,这样您就不必担心现在数组中的什么地方了。
我同意对混合数据使用 String[][]
的反对意见。
但是,如果 OP 没有选择,这里是测试程序的一个变体,展示了如何做:
public class Test {
public static void main(String[] args) {
int maxf = 4;
int maxc = 3;
String[][] datos = new String[maxf][maxc];
datos[0][2] = "hi";
datos[1][1] = "3";
datos[2][2] = "a";
datos[3][0] = "25";
for (int f = 0; f < maxf; f++)
for (int c = 0; c < maxc; c++) {
if (datos[f][c] != null) {
try {
int nota = Integer.parseInt(datos[f][c]);
System.out.println(nota);
} catch (NumberFormatException e) {
// Deliberately empty
}
}
}
}
}
您可以使用正则表达式“^[0-9]*$”检查字符串是否只包含数字。 我宁愿不使用异常捕获。我相信正则表达式匹配会更有效,像这样:
public static void main(String []args){
int maxf = 4;
int maxc = 3;
String[][] datos = new String[maxf][maxc];
datos[0][2] = "hi";
datos[1][1] = "3";
datos[2][2] = "a";
datos[3][0] = "25";
for(int f = 0; f < maxf; f++){
for(int c = 0; c < maxc; c++){
if(datos[f][c] != null && datos[f][c].matches("^[0-9]*$")){
int nota = Integer.parseInt(datos[f][c]);
System.out.println("datos[f][c] = " + nota);
// if(nota>3)
// aprobados.set(f-2, aprobados.get(f-2)+1);
}
}
}
}