Java 子字符串 : 'string index out of range'

标签 java substring indexoutofboundsexception

我猜我收到此错误是因为该字符串正在尝试对 null 值进行子串化。但是 ".length() > 0" 部分不会消除这个问题吗?

这是 Java 代码段:

if (itemdescription.length() > 0) {
    pstmt2.setString(3, itemdescription.substring(0,38));
} 
else { 
    pstmt2.setString(3, "_");
} 

我收到了这个错误:

 java.lang.StringIndexOutOfBoundsException: String index out of range: 38
    at java.lang.String.substring(Unknown Source)
    at MASInsert2.itemimport(MASInsert2.java:192)
    at MASInsert2.processRequest(MASInsert2.java:125)
    at MASInsert2.doGet(MASInsert2.java:219)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:835)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
    at java.lang.Thread.run(Unknown Source)

最佳答案

很遗憾 substring 没有以处理短字符串的方式实现 - 就像在其他语言中一样,例如 python 。

好的,我们无法更改它,并且每次使用 substr 时都必须考虑这种极端情况,而不是 if-else 子句,我会选择这个较短的变体:

myText.substring(0, Math.min(6, myText.length()))

关于Java 子字符串 : 'string index out of range' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/953527/

相关文章:

java - 当我尝试添加更多列时发生异常

java - 我在 jtable 中选择时遇到问题

c - 尝试从 C 中的字符串中删除子字符串,但始终失败

java - Intent服务AsyncTask后台setAdapter

python高效的子串搜索

java - 两个字符串之间的子字符串选择

matlab - MATLAB 中的索引越界错误

Java StringTokenizer 超出 .CSV 文件范围

java - Spring Boot 自定义字段验证

java - 进度条未在 fragment 中显示