разделить строку только на первый экземпляр - java

152

Я хочу разделить строку символом '='. Но я хочу, чтобы он разбивался только по первому экземпляру. Как я могу это сделать ? Вот пример JavaScript для символа '_', но он не работает для меня. Разделить строку только на первый экземпляр указанного символа

Пример :

apple=fruit table price=5

Когда я пробую String.split ('='); это дает

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

Но мне нужно

[apple],[fruit table price=5]

Благодарность

дракула
источник
Вам не нужно убегать =.
Рохит Джайн

Ответы:

294
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
Это непонятно, но это просто работает! Благодарность!
Клинт Иствуд
5
Некоторое пояснение: Limit 2 вернет список ТОЛЬКО 2 элементов. Он может вернуть список из 1 элемента, если выражение не соответствует. Если есть 2 совпадения с выражением, второй элемент возвращаемого массива не будет разделен.
modle13 03
11

Да, вы можете, просто передайте целочисленный параметр методу разделения

String stSplit = "apple=fruit table price=5"

stSplit.split("=", 2);

Вот ссылка на java-документ: String # split (java.lang.String, int)

codeMan
источник
5

Как многие другие ответы предлагают предельный подход, это может быть другой способ

Вы можете использовать метод indexOf для String, который вернет первое появление данного символа. Используя этот индекс, вы можете получить желаемый результат

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));
Шива
источник
2
Это не разделяет, а извлекает вторую часть. Для выполнения первой части потребуется еще одна строка кода ... 4 строки против 1 = большой палец вниз
Клинт Иствуд
1
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

По умолчанию метод split создает n массивов на основе заданного регулярного выражения. Но если вы хотите ограничить количество массивов, создаваемых после разделения, передайте второй аргумент как целочисленный аргумент.

Кайлаш Карки
источник
3
В чем была проблема? Включите более подробную информацию, чтобы ваш ответ был понятным!
Пареш Майани
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]);
    }
}
Бхола
источник
-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