用分隔符分析字符串“;” (JAVA)
我有一个字符串= “1.515 53.11 612.1 95.1 0 0 0 0” 我特林通过这个代码解析它:用分隔符分析字符串“;” (JAVA)
public class SendThread implements Runnable {
public void run()
{
socket = null;
BufferedReader in;
while (true)
{
// Loop until connected to server
while (socket == null){
try{
socket = new Socket ("192.168.137.1", 808);
}
catch (Exception e) {
socket = null;
//Log.d("Connection:", "Trying to connect...");
}
try {
Thread.sleep(30);
} catch (Exception e) {}
}
// Get from the server
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Log.d("Connection: ", "connected");
String line = null;
while ((line = in.readLine()) != null) {
Log.d("Socket:", line);
NumberFormat nf = new DecimalFormat ("990,0");
String[] tokens = null;
String[] tempData = null;
String[] windData = null;
try {
tokens = line.split(";");
tempData = tokens[0].trim().split(" ");
windData = tokens[1].trim().split(" ");
} catch (Exception error)
{
Log.d("Parsing error:", error+"");
}
for (int i = 0; i < currentTemp.length; i++)
currentTemp[i] = (Double) nf.parse(tempData[i]);
for (int i = 0; i < currentWind.length; i++)
currentWind[i] = (Double) nf.parse(windData[i]);
//Toast.makeText(getApplicationContext(), "Received data:", duration)
for (int i = 0; i < currentTemp.length; i++){
Log.d("Converted data: currentTemp["+i+"] = ", currentTemp[i]+"");
}
for (int i = 0; i < currentWind.length; i++){
Log.d("Converted data: currentWind["+i+"] = ", currentWind[i]+"");
}
}
socket = null;
Log.d("Connection: ", "lost.");
}
catch (Exception e) {
socket = null;
Log.d("Connection: ", "lost.");
Log.d("Connection:", e+"");
}
}
}
}
错误代码:(但我不知道更好的方法来保持套接字连接:)
我总是得到“java.text.ParseException:Unparseable number”。如何解决它?
令牌,TempData的,windData都是String []
除了别人怎么说,我敢打赌,当你做
windData = tokens[1].split(" ");
你
windDate = {"","0","0","0","0"}
,并尝试分析的第一个元素为Number 。 尝试做:
try {
tokens = line.split(";");
tempData = tokens[0].trim().split(" ");
windData = tokens[1].trim().split(" ");
} catch (Exception error)
{
Log.d("Parsing error:", error+"");
}
是的!非常感谢你,现在它的解析就像它应该 –
无论如何这是一个猜测作为马克英格拉姆说,你可能想用\\ s而不是“”来分割令牌。 – soulcheck
尝试使用在分割为空白的\s
;例如tempData = tokens[0].split("\s");
...它代表一个空白字符。
无效的转义序列(有效的转义序列是\ b \ t \ n \ f \ r \“\'\\) –
Try \\ s。\必须在java字符串中转义 – soulcheck
您不需要转义分号。试试看:
try {
tokens = line.split(";");
tempData = tokens[0].split(" ");
windData = tokens[1].split(" ");
} catch (Exception error)
{
Log.d("Parsing error:", error+"");
}
我怀疑你的分析错误是因为输入字符串中95.1之后的空格。就像这样,你的tempData数组将有5个值,最后一个是''。试图将其解析为一个数字会给你一个例外。
我试过了之前插入\\ 没有帮助... –
我添加了更多的信息到我的答案,关于异常的原因 – Chris
嗯,你的代码(发布)不会产生这个异常。其次,"\\;"
是多余的,你可以写";"
你可以使用,字符串标记为那。
String s = "1.515 53.11 612.1 95.1 ; 0 0 0 0";
StringTokenizer tokenizer = new StringTokenizer(s,";");
while(tokenizer.hasMoreElements()){
StringTokenizer numberTokenize = new StringTokenizer(tokenizer.nextToken());
while(numberTokenize.hasMoreElements()) {
System.out.println(numberTokenize.nextElement());
}
}
您报告的错误未由您发布的代码生成。 – cherouvim
你确定这就是你正在做的?我将代码放在一起,没有错误。此外,似乎你在试图解析数字时遇到了这种例外情况,这不在你提供的代码 –
中,你应该发布一个更大的代码段,除了\\;问题,我们仍然在猜测 – soulcheck