我有两个字符串:
String s1 = "[143, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, 158, 159, 162, 163, 164]";
String s2 = "[20, 35, 74, 78, 124, 125, 126, 127, 131, 132, 143, 144, 145, 146]";
我想要做的就是找到这两个字符串中最小的公共数字。所以我先取代" []"符号,并将字符串中的数字提取为整数。然后使用循环查找最小公共数。程序如下:
s1 = s1.replace("[","");
s1 = s1.replace("]","");
String [] band = s1.split(",");
s2 = s2.replace("[","");
s2 = s2.replace("]","");
String [] hotel = s1.split(",");
System.out.println( EarliestCommonSlot(hotel,band) );
EarliestCommonSlot()的定义如下:
public static int EarliestCommonSlot(String [] a1, String [] b1){
int i=0,j=0;
int common = -1;
int [] a = new int [a1.length];
int [] b = new int [b1.length];
for(i = 0;i < a1.length;i++)
{
a[i] = Integer.parseInt( a1[i]);
System.out.println(a1[i]);
}
for(i = 0;i < b1.length;i++)
{
b[i] = Integer.parseInt( b1[i]);
System.out.println(b1[i]);
}
i = 0; j=0;
while ( i< a.length && j < b.length){
if ( a[i] == b[j] ){
common = a[i]; break;
}
if ( a[i] < b[j] ){
i++;
}
else j++;
}
return common;
}
但是当我运行该程序时,它有以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: " 143"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:527)
at ClientReserve.EarliestCommonSlot(ClientReserve.java:39)
at ClientReserve.main(ClientReserve.java:179)
为什么?我怎么能解决这个问题?
答案 0 :(得分:6)
而不是
s1.replace("]"," "); // This replaces the bracket with a space.
// The number with the space will emit the error
使用:
s1.replace("]","");//This replaces the bracket with an empty string.
新代码:
s1 = s1.replace("[","");
s1 = s1.replace("]","");
String [] band = s1.split(", ");
s2 = s2.replace("[","");
s2 = s2.replace("]","");
String [] hotel = s1.split(", "); //Comma and a space. Thanks to SaviourSelf
System.out.println( EarliestCommonSlot(hotel,band) );
答案 1 :(得分:1)
请从数组中的字符串中删除空格。这可以通过
来完成 st.replaceAll("\\s+","")
和st.replaceAll("\\s","")
在错误本身中显示143在前缀中有空格。 线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“143”
答案 2 :(得分:1)
使用trim()方法
String s1 = "[143, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, 158, 159, 162, 163, 164]";
String s2 = "[20, 35, 74, 78, 124, 125, 126, 127, 131, 132, 143, 144, 145, 146]";
s1 = s1.replace("[","");
s1 = s1.replace("]","");
String [] band = s1.split(",");
s2 = s2.replace("[","");
s2 = s2.replace("]","");
String [] hotel = s1.split(",");
System.out.println( EarliestCommonSlot(hotel,band) );
public static int EarliestCommonSlot(String [] a1, String [] b1){
int i=0,j=0;
int common = -1;
int [] a = new int [a1.length];
int [] b = new int [b1.length];
for(i = 0;i < a1.length;i++)
{
a[i] = Integer.parseInt( a1[i].trim());
System.out.println(a1[i]);
}
for(i = 0;i < b1.length;i++)
{
b[i] = Integer.parseInt( b1[i].trim());
System.out.println(b1[i]);
}
i = 0; j=0;
while ( i< a.length && j < b.length){
if ( a[i] == b[j] ){
common = a[i]; break;
}
if ( a[i] < b[j] ){
i++;
}
else j++;
}
return common;
}
我已经运行了这个方法并且有效
答案 3 :(得分:0)
public class Test {
public static void main(String[] args) {
String s1 = "[143, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, 158, 159, 162, 163, 164]";
String s2 = "[20, 35, 74, 78, 124, 125, 126, 127, 131, 132, 143, 144, 145, 146]";
s1 = s1.replace("[","");
s1 = s1.replace("]","");
s1 = s1.replace(" ","");
String [] band = s1.split(",");
s2 = s2.replace("[","");
s2 = s2.replace("]","");
String [] hotel = s1.split(",");
System.out.println( EarliestCommonSlot(hotel,band) );
}
public static int EarliestCommonSlot(String [] a1, String [] b1){
int i=0,j=0;
int common = -1;
int [] a = new int [a1.length];
int [] b = new int [b1.length];
for(i = 0;i < a1.length;i++)
{
a[i] = Integer.parseInt( a1[i]);
System.out.println(a1[i]);
}
for(i = 0;i < b1.length;i++)
{
b[i] = Integer.parseInt( b1[i]);
System.out.println(b1[i]);
}
i = 0; j=0;
while ( i< a.length && j < b.length){
if ( a[i] == b[j] ){
common = a[i]; break;
}
if ( a[i] < b[j] ){
i++;
}
else j++;
}
return common;
}
}