我有一个像下面的字符串
String s = "John21071989Bangalore";
Class Person {
String name;
Long dob;
String city;
....
}
我有一个bean,拆分字符串并将值设置为Bean。
Person p = new Person();
p.setName(s.subString(0,4)); //John
p.setDob(Long.ParseLong(s.subString(4,12))); //2071989
p.setCity(s.subString(12,21));//Bangalore
现在我的问题是如果substring endIndesx小于length给出错误。我想把dob值作为null insted错误。
String s1 = "John2107 Bangalore";
Person p = new Person();
p.setName(s.subString(0,4)); //John
p.setDob(Long.ParseLong(s.subString(4,12))); //this should be null
p.setCity(s.subString(12,21));//Bangalore
答案 0 :(得分:2)
String s = "John21071989Bangalore";
Pattern pattern = Pattern.compile("(?<name>[a-zA-Z]+)(?<dob>\\d*)\\s*(?<city>[a-zA-Z]+)");
Matcher m = pattern.matcher(s);
Person p = new Person();
if (m.find()) {
p.setName(m.group("name"));
String dob = m.group("dob");
if (dob != null && !dob.trim().isEmpty())
p.setDob(Long.valueOf(dob.trim()));
p.setCity(m.group("city"));
}
答案 1 :(得分:0)
对于第二种情况,您有:
String s1 = "John2107 Bangalore";
根据这条指示:
p.setDob(Long.ParseLong(s.subString(4,12))); //this should be null
您正在尝试将空格解析为数字,这样会给您一个例外。
您可以验证该行或将该块包围为try-catch:
也许这样的事情可以帮到你:
创建一个名为“parseDob”的方法:
public Long parseDob(String val) {
try {
return Long.ParseLong(val);
} catch (NumberFormatException e) {
return null;
}
}
然后你可以保留你的代码:
Person p = new Person();
p.setName(s.subString(0,4)); //John
p.setDob(parseDob(s.subString(4,12)));
p.setCity(s.subString(12,21));//Bangalore
答案 2 :(得分:0)
有两种子串方法:
1.substring(int beginIndex)
2.substring(int beginIndex,int endIndex)
第二个是您使用的那个。它基本上从beginingIndex获取子串到endIndex。
示例:&#34; abcdefg&#34; .substring(2,4); //返回&#39; cd&#39; c是开始索引并包括在内。但是,endIndex 4代表了&#39; e&#39;在这个exapmle不包括在内。当您尝试使用此方法从开始索引到字符串结尾获取子字符串时,您必须输入大于字符串长度的endindex,这会产生异常。这正是你在做的事情。
而不是使用第二种方法使用第一种方法。它只是从给定索引到字符串结尾的子字符串。
示例:&#34; abcdefg&#34; .substring(2); //返回&#34; cdefg&#34;
总之,您的代码应如下所示:
Person p = new Person();
p.setName(s.subString(0,4)); //John
p.setDob(Long.ParseLong(s.subString(4,12))); //2071989
p.setCity(s.subString(12));//Bangalore