在Java中拆分字符串
我有一个接受字符串形式的消息的函数。消息如下所示:“HTTP/1.1 GET/1/\ n”在Java中拆分字符串
我一直在使用java.String.split方法将字符串分解为三个较小的子字符串,版本,命令和编号。然后我重新构造子串中的正弦字符串并输出它。
但是,当我运行teh函数时,程序导致ArrayIndex超出界限:1,但仍然正常工作。但是当我在调试器(netbeans)中一步一步地运行程序时,程序不会导致ArrayIndex超出界限无意义和功能正常
有什么建议吗?
山姆
String output = "";
String[] tokens = clientMessage.split(" ");
String version = tokens[0];
String command = tokens[1];
String potNum = tokens[2];
output = version + " " + command + " " + potNum;
编辑肯定的,程序是多线程的,在clientMsessage字符串包含 “HTTP/1.1 GET/1/\ N” 的时候,FO clientMessage值不会改变。 clientMessage是从客户端程序发送的字符串,然后在服务器上处理,输出是snet回到客户端,但我不断收到阵列错误
ArrayIndexOutOfBounds在访问没有任何值的数组的索引时出现意味着在您的情况下令牌[1]不存在。调试时你使用相同的字符串作为输入?
我建议您打印/记录您的输入。当你调试你的程序时,我怀疑你正在做一些不同的事情。它有可能在您第一次调用它时起作用,但当它再次调用时,它会失败。
在分割之前添加。
System.out.println("clientMessage >" + clientMessage +"<");
如果你的输出看起来像
clientMessage >HTCPCP/1.0 PROPFIND /1/<
clientMessage >HTCPCP/1.0 PROPFIND /1/<
clientMessage ><
看样子你有一个空的请求消息。我想这意味着客户端不会发送更多的请求,你必须以不同的方式处理。
输出:clientMessage> HTCPCP/1.0 PROPFIND/1/ HTCPCP/1.0 PROPFIND/1/ Samishalt 2012-03-14 14:52:04
所以你有一个空的客户端消息。您的请求看起来与您的模板非常不同。 – 2012-03-14 18:19:20
对不起,这不是一个答案,但只是一个额外的问题,以发现什么是真正的错误和评论太小,把这么多的代码。以下为我的作品,所以你的一个假设是错误的:
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
String clientMessage = "HTTP/1.1 GET /1/ \n";
String[] tokens = clientMessage.split(" ");
String version = tokens[0];
String command = tokens[1];
String potNum = tokens[2];
System.err.println(version + " " + command + " " + potNum);
}
}
它运行在我身边。我将不得不猜测,有时clientMessage是一个值不包含足够的空间分成3部分。
也许有更多的代码比你在这里包括。我将你的代码放在一个类中,如下所示,它编译并运行时没有错误。有什么遗漏吗?
public class Andrew {
public static void main(String args[]) {
String output = "";
String clientMessage = "HTTP/1.1 GET /1/ \n";
String[] tokens = clientMessage.split(" ");
String version = tokens[0];
String command = tokens[1];
String potNum = tokens[2];
output = version + " " + command + " " + potNum;
System.out.println(output);
}
}
是什么'clientMessage'?通常情况下,如果您在跟踪调试期间和正常运行期间看到行为差异,则表示数据竞争,**是程序多线程?**,具体而言,它是否会异步生成'clientMessage'? – amit 2012-03-14 13:04:02
我的猜测是你的clientMessage值在运行之间是不同的。通过在两次运行中输出值来验证clientMessage是否相同。 – gorjusborg 2012-03-14 13:04:13
clientMessage有多长时间?如果客户端消息中没有足够的令牌,那么当您执行命令=令牌时,您将获得ArrayIndexOutOfBounds异常[1] – CodeBlue 2012-03-14 13:04:46