2015-12-08 6 views
-2

Мне нужно сохранить значение в массиве, если условие не согласовано, иначе оно должно принимать значения после разделения строки относительно пробела. мой фрагмент кода приведен ниже:Необходимо сохранить значение в массиве

ArrayList<String> InOutsNum = new ArrayList<String>(); 
ArrayList<String> InOutsFinal = new ArrayList<String>(); 
String[] strTemp = new String[2]; 
String temp = "[3:0] data1"; 
strTemp = temp.split(" "); 
if(strTemp[1].isEmpty()) {  // TODO 
    strTemp[1] = strTemp[0]; 
    strTemp[0] = "1"; 
} 
InOutsNum.add(strTemp[0]); 
InOutsFinal.add(strTemp[1]); 

Помогите!

Выход:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 
+0

если я дать новую строку [2], до сих пор это делает не изменять выход. –

+0

Ах, вы правы, вы сразу же выбросите массив и замените его. Как только я исправлю синтаксические ошибки, ваш код отлично работает для меня. – azurefrog

+0

Просьба отправить всю трассировку стека и указать, что линия сбрасывает исключение. Кроме того, разместите свой * актуальный * код, то, что у вас есть в вашем вопросе, имеет синтаксические ошибки в объявлении списков массивов и не компилируется, поэтому не может быть то, что вы на самом деле выполняете. – azurefrog

ответ

0

Это работает для меня:

ArrayList<String> InOutsNum = new ArrayList<String>(); 
    ArrayList<String> InOutsFinal = new ArrayList<String>(); 
    String[] strTemp; //no need to declare because * 
    String temp = "[3:0] data1";//*here you set the array 
    strTemp = temp.split(" "); 
    if(strTemp[1].isEmpty()) {  // TODO 
     strTemp[1] = strTemp[0]; 
     strTemp[0] = "1"; 
    } 
    InOutsNum.add(strTemp[0]); //Contains "[3:0]" 
    InOutsFinal.add(strTemp[1]); //Contains "data1" 
+0

по-прежнему такая же ошибка с новой строкой [2]. –

3

Если вы используете раскол, нет необходимости указывать размер массива первым.

Вы можете сделать:

String[] tokens = temp.split(" "); 
+0

Это не касается проблемы OP, в которой они утверждают, что они получают исключение за пределы, основанное на содержимом массива, после того, как они назначают ему вывод 'temp.split (" ");' – azurefrog

+0

* * Примечания: ** Чтобы проверить количество полученных токенов, вы можете сделать «tokens.length». 'token [0]' будет '[3: 0]', а 'токен [1]' будет 'data1'. – user3437460

+0

@azurefrog Он решает проблему, потому что больше не будет OutOfBoundsException, если OP использует вышеуказанный код. – user3437460

0

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

использовать следующий код:

if(strTemp.length>=2 && strTemp[1].isEmpty()) { 

Кроме того, согласно предложению, если вы храните значения от раскола метода (»«) в массиве темп вам не нужно инициализировать его раньше.

0

Изменить код, чтобы использовать два массива, например:

String[] strTemp = new String[2]; 
String temp = "[3:0] data1"; 
String[] splitted = temp.split(" "); 
if(splitted.length == 1) {  // TODO 
    strTemp[1] = splitted[0]; 
    strTemp[0] = "1"; 
} 
+0

Спасибо! оно работает. –

0

Даже если вы инициализации или не массив будет заменен в результате раскола().

я думаю, что следующая треска будет работать нормально для вас

ArrayList<String> InOutsNum = new ArrayList<String>(); 

ArrayList<String> InOutsFinal = new ArrayList<String>(); 

String[] strTemp = new String[2]; 

String temp = "[3:0] data1"; 
// temp.trim(); better to include this 
if(temp.indexOf(' ')==-1) 
{ 
strTemp[1] = temp; //can be replaced by InOutsNum.add(temp); 

    strTemp[0] = "1"; //can be replaced by InOutsFinal.add("1"); if you don't want the array values 

} 
else 
{ 
strTemp = temp.split(" "); 
InOutsNum.add(strTemp[0]); 
InOutsFinal.add(strTemp[1]); 

//even this can be replaced by using substring functions like 
//int index=temp.indexOf(' '); 
//InOutsNum.add(temp.substring(0,index)); 
//InOutsFinal.add(temp.substring(0,temp.indexOf(' ',index+1))); 


} 

Эти длинных кодов можно избежать с помощью условных операторов и (:?)

Смежные вопросы