2017-02-13 31 views
-1

Я пытаюсь разделить определенную строку форматаРазбиваем строку, сформированную из массива полукокса

0001,0004,dd/mm/yy hh:mm:ss,01,value01,value02; 

для того, чтобы извлечь и сохранить value01 и value02. Как я могу это сделать?

Вот что я пытался до сих пор:

//buffer contains a String like: "0001,0004,dd/mm/yy hh:mm:ss,01,18,750" 
String string = new String(buffer,0,len); 

String[] parts = string.split(","); 

String temp = parts[5]; 
String lum = parts[6]; 
System.out.print(temp); 
System.out.print(lum); 

С помощью этого кода я получаю ArrayIndexOutofBounds при запуске программы в Netbeans. Image of error description

Также попробовал этот метод:

//buffer contains a String like: "0001,0004,dd/mm/yy hh:mm:ss,01,18,750" 
String s= new String(buffer,0,len); 

String aux = s + ","; 
String[] dados = aux.split(",");   
float valor1 = Float.parseFloat(dados[5]); 
float valor2 = Float.parseFloat(dados[6]); 
System.out.print(aux); 
+0

Если я правильно понимаю ваш вопрос: как мне разделить ** 0001,0004, dd/mm/yy hh: mm: ss, 01, value01, value02; ** string. Весь другой код (чтение строки и т. Д.) - лишняя информация! – ParkerHalo

+0

Да, это все. Извините, если введение слишком длинное, но я думал, что дам понять, что именно я делаю, так что легче получить помощь. –

+0

не проблема, я отредактирую ваше сообщение, чтобы сделать его более сжатым. – ParkerHalo

ответ

0

Достижение, что вы пытаетесь сделать, это acutally довольно легко.

Предполагая, что ваша строка действительно всегда выглядит следующим образом:
0001,0004,dd/mm/yy hh:mm:ss,01,value01,value02;

Просто отрезать начало строки, которые вам не нужны, и извлекать значения впоследствии:

// This can be done in hundreds of ways, for the sake of simplicity i'll use substring 
String s ="0001,0004,dd/mm/yy hh:mm:ss,01,value01,value02;"; 
String cutOff = s.substring(31, s.length()-1); 
String[] results = cutOff.split(","); 
+0

это выглядит очень хрупкое решение. вы не должны полагаться на точную длину предыдущих элементов. –

+0

Теперь я получаю другую ошибку: Код: [ссылка] http://prntscr.com/e89bwv [/ link] Ошибка: [ссылка] http://prntscr.com/e89c9p [/ link] –

1

Это:

String temp = parts[5]; 
String lum = parts[6]; 

Должно быть так:

String temp = parts[4]; 
String lum = parts[5]; 

Помните, что arrays in Java are zero-based. Так что, если вы сделаете это:

String[] parts = "0001,0004,dd/mm/yy hh:mm:ss,01,value01,value02".split(","); 

Затем "0001" будет в parts[0], "0004" в parts[1], "value01" в parts[4] т.д.

+0

Я получаю сообщение об ошибке также. java.lang.ArrayIndexOutOfBoundsException: 0 \t в wasp.Wasp $ SerialReader.run (Wasp.java:85) \t в java.lang.Thread.run (Thread.java:745) –

+0

Вы пробовали отладки кода?Может быть, 'len' равен нулю, или' buffer' фактически пуст или не содержит того, что, по вашему мнению, он делает. – walen

+0

System.out.print (новый String (буфер, 0, len)); -> Выходит строку, как я ожидаю. http://prntscr.com/e89qpp –

0

пожалуйста, найти ниже код. В коде Андрея это немного изменилось. Поскольку мы сохраняем строку после разделения в массив строк, и это очевидно, что индекс массива начинается с 0. Поэтому для того, чтобы получить value01 и value02, мы должны использовать индекс 4 и 5.

public class JavaApplication1 
{ 
    public static void main(String[] args) 
    { 
    String str="0001,0004,dd/mm/yy hh:mm:ss,01,value01,value02"; 
    String [] strArr=str.split(","); 
    String temp=strArr[4]; 
    String lum=strArr[5]; 
    System.out.println(temp); 
    System.out.println(lum); 
} 
} 

Please find the output in the image