у меня есть массив элементов, как показано нижерегулярного выражения для соответствия данных
[1;233,2;345,3;656]
ищет регулярное выражение, чтобы сохранить мой массив как ниже
[233,345,656]
так, который сбрасывает значение до запятой
у меня есть массив элементов, как показано нижерегулярного выражения для соответствия данных
[1;233,2;345,3;656]
ищет регулярное выражение, чтобы сохранить мой массив как ниже
[233,345,656]
так, который сбрасывает значение до запятой
возможно, попробуйте regex заменить на [0-9]+;
с пустой строкой. Если будет только одна цифра, тогда + не нужен. В случае одной цифры также может быть проще просто найти точку с запятой, удалить ее и предыдущий символ.
, ваше регулярное выражение работает, но после разделения данных сохранения, как показано ниже [, 233,, 345,, 656], как я могу избегайте этой дополнительной запятой –
@vishwa: smitec предлагает вам заменить на пустую строку, а не раскалывать –
replaceAll("\d;" ,"")
Если количество цифр не фиксируется на одном и может измениться, вы можете использовать \d+
Это было бы что-то вроде:
;([^,;]+)$1
Это означает, что по крайней мере один, как точка с запятой стартовый символ, затем один или несколько символов, которые не являются точкой с запятой или запятой. Наконец, он обозначает только часть справа от точки с запятой как желаемый результат.
Я не уверен, что это синтаксис для Java, в частности. Я больше парень .NET. Но оттуда ты сможешь сбежать.
Вы можете разделить строку массива на ,, чтобы получить пары, а не на ;, чтобы найти номера.
PHP:
$string= "[1;233,2;345,3;656]";
$temp=explode(",", $string); //to get couples like 1;233
print_r($temp);
$result=array();
for($i=0; $i<count($temp);$i++){
$temp1=explode(";", $temp[$i]);
array_push($result,$temp1[1]);//take second value 233
}
print_r($result);
Выход: $ couple_array: Array ([0] => [1;233 [1] => 2;345 [2] => 3;656])
Выход: $ массив: Array ([0] => 233 [1] => 345 [2] => 656])
Java:
String str = "[1;233,2;345,3;656]";
String[] temp = str.split(",");//to get couples like 1;233
int size=temp.length;
String[] result=new String[size];
for(int i =0; i < size ; i++){
String[] temp1=str.split(";");//take second value 233
result[i]=temp1[1];
}
Если ваш массив набирается целыми числами, регулярные выражения выходят за рамки. Вам следует подумать о создании нового массива с целыми значениями, превосходящими, скажем, 99 (3-значные целые числа).
Однако, если массив содержит строки, вот регулярное выражение вы хотите:
Pattern yourPattern = Pattern.compile("(?<=\\D)\\d{1,2}(?=\\D)");
// this will find 1 or 2 digit numbers preceded and followed by anything but a digit
Edit: для регулярного решения выражений, я предполагаю, что мы говорим о строковом представлении массива. Следовательно, проверка для нечисловых символов. Если вместо этого вы выполняли итерацию по массиву String, то вы, вероятно, могли бы использовать Integer.valueOf("12")
и сравнивать, если значение int равно 99. То есть, если вы уверены, что ваши строки всегда будут представлять Integer (или обрабатывать исключение NumberFormatException в противном случае).
Вы хотите разделить точку с запятой, а затем получить только числа, которые находятся слева от запятой, и что это? – Renan
@Renan: разделить точкой с запятой, а затем получить числа сразу после точки с запятой [233,345,656] и отбросить данные до запятой –