2013-08-27 2 views
82

Я хочу разбить строку на '=' charecter. Но я хочу, чтобы он разделился только на первый экземпляр. Как я могу это сделать ? Вот пример JavaScript для '_' гольца, но он не работает для меня split string only on first instance of specified characterразделить строку только на первый экземпляр - java

Пример:

apple=fruit table price=5 

Когда я пытаюсь String.split ('='); это дает

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

Но мне нужно

[apple],[fruit table price=5] 

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

+0

Вам не нужно скрывать '='. –

ответ

164
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

Примечание. JS работает против этого. – trudesign

+0

Сложно понять, но это просто работает! Благодаря! –

+0

Некоторые уточнения: Limit 2 вернет список элементов AT MOST 2. Он может возвращать список из 1 элемента, если соответствие этому выражению отсутствует. Если в выражении имеется 2 совпадения, второй элемент возвращаемого массива не будет разделен. – modle13

6

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

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

stSplit.split("=", 2); 

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

4

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

Вы можете использовать метод indexOf на строке, которая будет возвращает первое вхождение заданного символа, с помощью этого индекса вы можете получить желаемый результат

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

Это не разделение, а извлечение второй части. Для первой части потребуется еще одна строка кода ... 4 строки по сравнению с 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_! 

я люблю писать собственные методы:

+1

Этот метод не слишком полезен, так как разделитель жестко запрограммирован. Кроме того, реализация линейного поиска с циклом for не дает преимущества перед использованием String.indexOf, чтобы найти местоположение первого разделителя. В-третьих, неинтересно видеть, сколько элементов String возвращается. Поскольку мы говорим о разделении вещей на две части, рассмотрим использование типа данных Pair , который представляет собой ровно две строки вместо создания массива. –

0

String slpitString [] = stringInToSearch.split ("pattern", 2);

+0

В чем была проблема? Включите более подробную информацию, чтобы сделать свой ответ понятным! –

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]); 
    } 
} 
Смежные вопросы