Вход :
String arr[] = new String[4];
приб[0] = +2501 +2502 +2503 +2504
обр[1] = -2501 -2504 +2505 +2506 +2507 +2509
приб [2] = +2501 +2511 -2502 -2505
приб [3] = +2513 -2507 -2503 -2511 -2509
Выход :
Я хочу разделить строку как:
Положительный:
приб1[0] = +2501 +2502 +2503 +2504
приб1[1] = +2505 +2506 +2507 +2509
приб1[2] = +2501 +2511
приб1[3] = +2513
Отрицательный:
обрр2[0] = -2501 -2504
обрр2[1] = -2502 -2505
приб2[2] = -2507 -2503 -2511 -2509
int nostrt = -1, m = 0;
StringBuilder str4 = new StringBuilder();
for(int i = 0;i < strbullist.length(); i++)
{
char c = strbullist.charAt(i);
if (nostrt == -1)
{
m = i;
nostrt = 1;
}
if (c=='-')
{
str4.append(strbullist.substring(m, i));
nostrt = -1;
System.out.println(str4);
}
}
Вам нужны два регулярных выражения, одно для соответствия отрицательным числам, другое для соответствия положительным числам. s.replaceAll("\\+\\d*", "")
Этому выражению соответствуют все наборы только цифр со знаком «+» впереди. Замените «+» на «-», чтобы соответствовать отрицательным числам.
Попробуйте эту логику и измените в соответствии с вашими потребностями.
импортировать java.util.Scanner; открытый класс p19 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("Enter the size of the array:");
int size;
size=sc.nextInt();
int arr[ ]=new int[size];
int i,j=0;
System.out.println("Enter the Element of the array:");
while(j<size)
{
arr[j]=sc.nextInt();
j++;
}
System.out.println("Positive numbers are:");
for(i=0;i<size;i++)
{
if (arr[i]>0)
{
System.out.print(arr[i]+" ");
}
}
System.out.println("\nNegative numbers are:");
for(i=0;i<size;i++){
if (arr[i]<0)
{
System.out.print(arr[i]+" ");
}
}
sc.close();
}}
я хочу просто отделить его. Это строка, а не целое число.
ул = "2234 -8765 +665"; int[] splited = Integer.parseInt(str.split("\\s+"));
Вы можете разделить строку на один или несколько пробельных символов (например, \s+
) и перебрать полученный массив, чтобы определить, начинается ли элемент с положительного или отрицательного символа.
Демо:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
String str = "+2501 +2502 +2503 +2504 -2501 -2504 +2505 +2506 +2507 +2509 +2501 +2511 -2502 -2505 +2513 -2507 -2503 -2511 -2509";
List<String> positiveNums = new ArrayList<>();
List<String> negativeNums = new ArrayList<>();
String[] arr = str.split("\\s+");
for (String s : arr) {
if (s.startsWith("+")) {
positiveNums.add(s);
} else if (s.startsWith("-")) {
negativeNums.add(s);
}
}
System.out.println("Positive numbers: " + positiveNums);
System.out.println("Negative numbers: " + negativeNums);
// If you want to store the output into string variables
String positiveValues = positiveNums.toString();
String negativeValues = negativeNums.toString();
System.out.println("Positive numbers: " + positiveValues);
System.out.println("Negative numbers: " + negativeValues);
}
}
Выход:
Positive numbers: [+2501, +2502, +2503, +2504, +2505, +2506, +2507, +2509, +2501, +2511, +2513]
Negative numbers: [-2501, -2504, -2502, -2505, -2507, -2503, -2511, -2509]
Positive numbers: [+2501, +2502, +2503, +2504, +2505, +2506, +2507, +2509, +2501, +2511, +2513]
Negative numbers: [-2501, -2504, -2502, -2505, -2507, -2503, -2511, -2509]
Кроме того, вы также можете использовать регулярное выражение , \+\d+|\-\d+
, что означает одну или несколько цифр, за которыми следует символ плюса (например, \+\d+
), или (например, |
) одну или несколько цифр, за которыми следует символ минуса (например, \-\d+
).
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String str = "+2501 +2502 +2503 +2504 -2501 -2504 +2505 +2506 +2507 +2509 +2501 +2511 -2502 -2505 +2513 -2507 -2503 -2511 -2509";
Matcher matcher = Pattern.compile("\\+\\d+|\\-\\d+").matcher(str);
List<String> positiveNums = new ArrayList<>();
List<String> negativeNums = new ArrayList<>();
while (matcher.find()) {
String s = matcher.group();
if (s.startsWith("+")) {
positiveNums.add(s);
} else if (s.startsWith("-")) {
negativeNums.add(s);
}
}
System.out.println("Positive numbers: " + positiveNums);
System.out.println("Negative numbers: " + negativeNums);
}
}
Выход:
Positive numbers: [+2501, +2502, +2503, +2504, +2505, +2506, +2507, +2509, +2501, +2511, +2513]
Negative numbers: [-2501, -2504, -2502, -2505, -2507, -2503, -2511, -2509]
Если вы хотите использовать StringBuilder
вместо List
:
public class Main {
public static void main(String[] args) {
String str = "+2501 +2502 +2503 +2504 -2501 -2504 +2505 +2506 +2507 +2509 +2501 +2511 -2502 -2505 +2513 -2507 -2503 -2511 -2509";
StringBuilder positiveNums = new StringBuilder();
StringBuilder negativeNums = new StringBuilder();
String[] arr = str.split("\\s+");
for (String s : arr) {
if (s.startsWith("+")) {
positiveNums.append(s + " ");
} else if (s.startsWith("-")) {
negativeNums.append(s + " ");
}
}
String positiveValues = positiveNums.toString().trim();
String negativeValues = negativeNums.toString().trim();
System.out.println("Positive numbers: " + positiveValues);
System.out.println("Negative numbers: " + negativeValues);
}
}
Выход:
Positive numbers: +2501 +2502 +2503 +2504 +2505 +2506 +2507 +2509 +2501 +2511 +2513
Negative numbers: -2501 -2504 -2502 -2505 -2507 -2503 -2511 -2509
Используя String#matches:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
String str = "+2501 +2502 +2503 +2504 -2501 -2504 +2505 +2506 +2507 +2509 +2501 +2511 -2502 -2505 +2513 -2507 -2503 -2511 -2509";
List<String> positiveNums = new ArrayList<>();
List<String> negativeNums = new ArrayList<>();
String[] arr = str.split("\\s+");
for (String s : arr) {
if (s.matches("\\+\\d+")) {
positiveNums.add(s);
} else if (s.matches("\\-\\d+")) {
negativeNums.add(s);
}
}
System.out.println("Positive numbers: " + positiveNums);
System.out.println("Negative numbers: " + negativeNums);
}
}
Выход:
Positive numbers: [+2501, +2502, +2503, +2504, +2505, +2506, +2507, +2509, +2501, +2511, +2513]
Negative numbers: [-2501, -2504, -2502, -2505, -2507, -2503, -2511, -2509]
Если строки в вашем вопросе являются элементами String[]
, вам нужен дополнительный цикл для повторения этого String[]
. Остальные вещи останутся прежними.
public class Main {
public static void main(String... args) {
String[] strArr = { "+2501 +2502 +2503 +2504", "-2501 -2504 +2505 +2506 +2507 +2509", "+2501 +2511 -2502 -2505",
"+2513 -2507 -2503 -2511 -2509" };
StringBuilder positiveNums = new StringBuilder();
StringBuilder negativeNums = new StringBuilder();
for (String str : strArr) {
String[] arr = str.split("\\s+");
for (String s : arr) {
if (s.startsWith("+")) {
positiveNums.append(s + " ");
} else if (s.startsWith("-")) {
negativeNums.append(s + " ");
}
}
}
String positiveValues = positiveNums.toString().trim();
String negativeValues = negativeNums.toString().trim();
System.out.println("Positive numbers: " + positiveValues);
System.out.println("Negative numbers: " + negativeValues);
}
}
Выход:
Positive numbers: +2501 +2502 +2503 +2504 +2505 +2506 +2507 +2509 +2501 +2511 +2513
Negative numbers: -2501 -2504 -2502 -2505 -2507 -2503 -2511 -2509
Спасибо, сэр.
Добро пожаловать.
если есть массив строк и вы хотите сопоставить шаблон, то как это будет работать?
Я пытался, но он берет только последнее совпадение строки
@shs - Не беспокойтесь ... Я также опубликовал решение (последнее в моем ответе) для этого требования.
У вас есть ссылка?
@shs - Ссылка для чего?
Соответствие шаблону массива строк
@shs - не существует единого API для сопоставления элементов массива ... есть способы, например. Я разместил один (последний в моем ответе)... есть много других способов, например. с помощью Stream
API, но вы должны повторять массив в каждом случае. Не стесняйтесь комментировать в случае каких-либо дальнейших сомнений.
Я отредактировал вопрос, не могли бы вы дать мне предложение по этому поводу.
@shs - я опубликовал обновление (последнее решение в моем ответе), чтобы выполнить это требование. Не стесняйтесь комментировать в случае каких-либо дальнейших сомнений.
Если вы хотите, чтобы числа хранились в строке, попробуйте это
Scanner sc = new Scanner(System.in);
System.out.print("Enter size : ");
int size = sc.nextInt();
String [] numbers = new String[size];
String positive = "", negative = "";
System.out.print("Enter number with signs (-) or (+) : ");
for(int i = 0; i < size; i++){
numbers[i] = sc.next();
}
for(int i =0; i < size; i++){
if (numbers[i].contains("-")){
negative += numbers[i] + " ";
}else if (numbers[i].contains("+")){
positive += numbers[i] + " ";
}
}
System.out.println("Negatives : " + negative);
System.out.println("Positives : " + positive);
ты уже осознал "раскол", теперь подумай "за счет чего". Я предполагаю, что строка такая
"-2501 -2504 +2505 +2506 +2507 +2509"
, так что это"-2501 -2504 +2505 +2506 +2507 +2509".split(. . . )
?