розділений рядок лише на першому екземплярі - java


145

Я хочу розділити рядок на charecter '='. Але я хочу, щоб він розділився лише в першій інстанції. Як я можу це зробити? Ось приклад JavaScript для '_' char, але він не працює для мене розділеною рядком лише на першому екземплярі вказаного символу

Приклад:

apple=fruit table price=5

Коли я пробую String.split ('='); це дає

[apple],[fruit table price],[5]

Але мені потрібно

[apple],[fruit table price=5]

Дякую


Вам не потрібно бігти =.
Rohit Jain

Відповіді:


282
string.split("=", 2);

Як String.split(java.lang.String regex, int limit)пояснюється:

Масив, що повертається цим методом, містить кожну підрядку цього рядка, яка закінчується іншою підрядкою, яка відповідає заданому виразу або закінчується кінцем рядка. Підрядки в масиві знаходяться в тому порядку, в якому вони зустрічаються в цьому рядку. Якщо вираз не відповідає жодній частині вводу, то в отриманому масиві є лише один елемент, а саме цей рядок.

limitПараметр контролює кількість разів застосовується шаблон і , отже , впливає на довжину результуючого масиву. Якщо межа n більший за нуль, то шаблон буде застосовано не більше n - 1 разів, довжина масиву буде не більше n , а останній запис масиву буде містити весь вхід за межі останнього відповідного роздільника.

Наприклад, рядок boo:and:fooдає такі результати з такими параметрами:

Regex Limit    Result
:     2        { "boo", "and:foo" }
:     5        { "boo", "and", "foo" }
:    -2        { "boo", "and", "foo" }
o     5        { "b", "", ":and:f", "", "" }
o    -2        { "b", "", ":and:f", "", "" }
o     0        { "b", "", ":and:f" }

1
Це незрозуміло, але це просто працює! Дякую!
Клінт Іствуд

4
Деякі роз’яснення: Limit 2 поверне список елементів AT MOST 2. Він може повернути список з 1 елемента, якщо вираз не відповідає. Якщо до виразу є 2 збіги, другий елемент повернутого масиву не буде розділений.
modle13


5

Оскільки багато інших відповідей припускають граничний підхід, це може бути інший спосіб

Ви можете використовувати метод indexOf на String, який повертає першу появу заданого символу, використовуючи цей індекс, ви можете отримати бажаний вихід

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));

2
Це не розділяється, але витягує другу частину. Якщо взяти першу частину, знадобиться ще один рядок коду ... 4 рядки проти 1 = великі пальці вниз
Клінт Іствуд

0

Спробуйте цей код ...

Це працює.

public class Split
{
    public static void main(String...args)
    {
        String a = "%abcdef&Ghijk%xyz";
        String b[] = a.split("%", 2);

        System.out.println("Value = "+b[1]);
    }
}

0
String string = "This is test string on web";
String splitData[] = string.split("\\s", 2);

Result ::
splitData[0] =>  This
splitData[1] =>  is test string  


String string = "This is test string on web";
String splitData[] = string.split("\\s", 3);

Result ::
splitData[0] =>  This
splitData[1] =>  is
splitData[1] =>  test string on web

За замовчуванням метод розділення створити n чисел масивів на основі заданого регулярного вираження. Але якщо ви хочете обмежити кількість масивів для створення після розбиття, ніж передайте другий аргумент як цілий аргумент.


3
У чому була проблема? Додайте більше деталей, щоб зробити свою відповідь зрозумілою!
Paresh Mayani

-2
String[] func(String apple){
String[] tmp = new String[2];
for(int i=0;i<apple.length;i++){
   if(apple.charAt(i)=='='){
      tmp[0]=apple.substring(0,i);
      tmp[1]=apple.substring(i+1,apple.length);
      break;
   }
}
return tmp;
}
//returns string_ARRAY_!

мені подобається писати власні методи :)


3
Цей спосіб не надто корисний, оскільки роздільник жорстко кодується. Крім того, реалізація лінійного пошуку з циклом for не приносить переваги, ніж використання String.indexOf для пошуку місця розташування першого роздільника. По-третє, не інтуїтивно зрозуміти, скільки елементів String повернуто. Поки ми говоримо про розділення речей на два, розглянемо використання типу даних Pair <String, String>, який представляє рівно два рядки замість створення масиву.
Gee Bee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.