endIndex小于此String对象子字符串的长度

时间:2018-03-27 01:48:33

标签: java string substring

我有一个像下面的字符串

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

3 个答案:

答案 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