如果子字符串不在我的原始字符串中,如何避免 StringIndexOutOfBoundsException?
How to avoid the StringIndexOutOfBoundsException if a substring is not in my original String?
我有类似的东西:
String idCodice = cessionarioCommittente.substring(
cessionarioCommittente.indexOf("<IdCodice>") + 10,
cessionarioCommittente.indexOf("</IdCodice>"));
用于提取 XML 文档的标记内的值,该文档由 cessionarioCommittente
字符串变量的内容表示。
问题是 cessionarioCommittente
字符串中可能不存在 <IdCodice>
标记。
所以在这种情况下我得到这个例外:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -10
at java.lang.String.substring(String.java:1937)
at it.sistinf.ediwea.fepa.LoadFatturePa.run(LoadFatturePa.java:103)
at it.sistinf.ediwea.fepa.TestLoadFatturePa.main(TestLoadFatturePa.java:18)
我该如何解决这个问题?例如检查字符串中是否存在这个值?
您可以进行初步检查以确保您要查找的标签存在于字符串中:
String idCodice = null;
int startTag = cessionarioCommittente.indexOf("<IdCodice>");
int endTag = cessionarioCommittente.indexOf("</IdCodice>");
if (startTag >= 0 && endTag > startTag) {
idCodice = cessionarioCommittente.substring(startTag + 10, endTag);
}
通过将索引存储在变量中,您可以避免搜索它们两次。
String.indexOf() returns -1 如果未找到字符串。在使用它之前检查 return 值是否 >= 0。
您可以按照 Eran 的建议进行操作,也可以使用 contains
方法和 三元 运算符:
idCodice = (cessionarioCommittente.contains("<IdCodice>") &&cessionarioCommittente.contains("</IdCodice>")) ? cessionarioCommittente.substring(cessionarioCommittente.indexOf("<IdCodice>") + 10, cessionarioCommittente.indexOf("</IdCodice>")):null;
在做子字符串之前,你可以使用类似的东西:
String idCodice;
if(cessionarioCommittente.indexOf("<IdCodice>") > -1){
idCodice = cessionarioCommittente.substring(cessionarioCommittente.indexOf("<IdCodice>") + 10, cessionarioCommittente.indexOf("</IdCodice>"));
}
使用 indexOf 或 contains 在字符串中搜索时要注意性能问题(注意:contains() 方法在内部使用 indexOf())。
但我的问题是,你为什么要手动解析 xml,有很多图书馆这样做效率很高。
here!是一个非常简单的例子
我有类似的东西:
String idCodice = cessionarioCommittente.substring(
cessionarioCommittente.indexOf("<IdCodice>") + 10,
cessionarioCommittente.indexOf("</IdCodice>"));
用于提取 XML 文档的标记内的值,该文档由 cessionarioCommittente
字符串变量的内容表示。
问题是 cessionarioCommittente
字符串中可能不存在 <IdCodice>
标记。
所以在这种情况下我得到这个例外:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -10
at java.lang.String.substring(String.java:1937)
at it.sistinf.ediwea.fepa.LoadFatturePa.run(LoadFatturePa.java:103)
at it.sistinf.ediwea.fepa.TestLoadFatturePa.main(TestLoadFatturePa.java:18)
我该如何解决这个问题?例如检查字符串中是否存在这个值?
您可以进行初步检查以确保您要查找的标签存在于字符串中:
String idCodice = null;
int startTag = cessionarioCommittente.indexOf("<IdCodice>");
int endTag = cessionarioCommittente.indexOf("</IdCodice>");
if (startTag >= 0 && endTag > startTag) {
idCodice = cessionarioCommittente.substring(startTag + 10, endTag);
}
通过将索引存储在变量中,您可以避免搜索它们两次。
String.indexOf() returns -1 如果未找到字符串。在使用它之前检查 return 值是否 >= 0。
您可以按照 Eran 的建议进行操作,也可以使用 contains
方法和 三元 运算符:
idCodice = (cessionarioCommittente.contains("<IdCodice>") &&cessionarioCommittente.contains("</IdCodice>")) ? cessionarioCommittente.substring(cessionarioCommittente.indexOf("<IdCodice>") + 10, cessionarioCommittente.indexOf("</IdCodice>")):null;
在做子字符串之前,你可以使用类似的东西:
String idCodice;
if(cessionarioCommittente.indexOf("<IdCodice>") > -1){
idCodice = cessionarioCommittente.substring(cessionarioCommittente.indexOf("<IdCodice>") + 10, cessionarioCommittente.indexOf("</IdCodice>"));
}
使用 indexOf 或 contains 在字符串中搜索时要注意性能问题(注意:contains() 方法在内部使用 indexOf())。 但我的问题是,你为什么要手动解析 xml,有很多图书馆这样做效率很高。 here!是一个非常简单的例子