StringIndexOutofBoundsException输入空的String Java时出错

时间:2019-03-08 22:40:50

标签: java string loops stringbuilder

嗨,每当我尝试输入一个空String时,我总是收到此错误。到目前为止,其他所有内容都可以正常运行,如果我在String内放置空格,则可以正常运行。我知道这确实很挑剔,但是我很好奇在这种情况下应该采取什么措施以确保它只返回一个空字符串。

<node>
    <rack>/default-rack</rack>
    <state>RUNNING</state>
    <id>host1.domain.com:54158</id>
    <nodeHostName>host1.domain.com</nodeHostName>
    <nodeHTTPAddress>host1.domain.com:8042</nodeHTTPAddress>
    <lastHealthUpdate>1476995346399</lastHealthUpdate>
    <version>3.0.0-SNAPSHOT</version>
    <healthReport></healthReport>
    <numContainers>0</numContainers>
    <usedMemoryMB>0</usedMemoryMB>
    <availMemoryMB>8192</availMemoryMB>
    <usedVirtualCores>0</usedVirtualCores>
    <availableVirtualCores>8</availableVirtualCores>
    <resourceUtilization>
        <nodePhysicalMemoryMB>1027</nodePhysicalMemoryMB>
        <nodeVirtualMemoryMB>1027</nodeVirtualMemoryMB>
        <nodeCPUUsage>0.006664445623755455</nodeCPUUsage>
        <aggregatedContainersPhysicalMemoryMB>0</aggregatedContainersPhysicalMemoryMB>
        <aggregatedContainersVirtualMemoryMB>0</aggregatedContainersVirtualMemoryMB>
        <containersCPUUsage>0.0</containersCPUUsage>
    </resourceUtilization>
  </node>

我确实为输入此值创建了一个特殊实例,但仍然无法正常工作。

该如何纠正?

**> HW2.nthWord(2,"")
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(Unknown Source)
    at HW2.nthWord(HW2.java:124)**

1 个答案:

答案 0 :(得分:0)

我注意到了几件事

for(int i = 0; input.charAt(i) != ' '; i = i + 1){
   create.append(input.charAt(i));
}

此循环将继续添加“输入”字符,直到到达空格字符为止。如果输入没有空格字符,则此循环将超出输入的长度,并导致错误。您可能想要类似的东西:

for(int i = 0;  i < input.length(); i = i + 1){
   if(input.charAt(i) == ' ' ){
      break;
   } else {
      create.append(input.charAt(i));
   }
}

此外,当您到达该行时:

if(input.charAt(i) == ' ' && i < input.length() - 1 && input.charAt(i+1) != ' '){

您已经知道i

if(input.charAt(i) == ' ' && input.charAt(i+1) != ' '){

出于同样的原因,请参见下一节:

  if( i != input.length()-1 && input.charAt(i+1) != ' '){
    totalspaces = totalspaces + 1;
  }

可以更改为

  if( i != input.length()-1 ){
    totalspaces = totalspaces + 1;
  }

此外,我注意到您可能使问题变得更加棘手。如果在单个for循环中解决问题,该问题将容易得多。

for(int i = 0;  i < input.length(); i = i + 1){
   if( x ) //x is some code that determines if you are part of the nth word
      create.append(input.charAt(i));
}