Как разбить строку в Java - PullRequest
       50

Как разбить строку в Java

1496 голосов
/ 14 августа 2010

У меня есть строка, "004-034556", которую я хочу разделить на две строки:

string1="004";
string2="034556";

Это означает, что первая строка будет содержать символы до '-', а вторая строка будет содержать символы после '-'. Я также хочу проверить, содержит ли строка '-'. Если нет, я брошу исключение. Как я могу это сделать?

Ответы [ 33 ]

7 голосов
/ 03 марта 2017

Вот два способа достичь этого.

ПУТЬ 1: поскольку вам нужно разделить два числа специальным символом, вы можете использовать регулярное выражение

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TrialClass
{
    public static void main(String[] args)
    {
        Pattern p = Pattern.compile("[0-9]+");
        Matcher m = p.matcher("004-034556");

        while(m.find())
        {
            System.out.println(m.group());
        }
    }
}

ПУТЬ 2. Использование метода разделения строк

public class TrialClass
{
    public static void main(String[] args)
    {
        String temp = "004-034556";
        String [] arrString = temp.split("-");
        for(String splitString:arrString)
        {
            System.out.println(splitString);
        }
    }
}
6 голосов
/ 17 апреля 2017

Вы можете просто использовать StringTokenizer, чтобы разделить строку на две или более частей, независимо от того, есть ли какие-либо разделители:

StringTokenizer st = new StringTokenizer("004-034556", "-");
while(st.hasMoreTokens())
{
    System.out.println(st.nextToken());
}
4 голосов
/ 20 ноября 2016
String str="004-034556"
String[] sTemp=str.split("-");// '-' is a delimiter

string1=004 // sTemp[0];
string2=034556//sTemp[1];
4 голосов
/ 09 мая 2016

Проверьте метод split() в классе String в javadoc.

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

String data = "004-034556-1212-232-232";
int cnt = 1;
for (String item : data.split("-")) {
        System.out.println("string "+cnt+" = "+item);
        cnt++;
}

Здесь много примеров разбитой строки, но я немного оптимизировал код.

3 голосов
/ 20 ноября 2018

Есть только два метода, которые вам действительно нужно рассмотреть.

Используйте String.split, если используется разделитель из одного символа, или вас не волнует производительность

Еслипроизводительность не является проблемой, или если разделитель представляет собой один символ, который не является специальным символом регулярного выражения (т. е. не является одним из .$|()[{^?*+\), тогда вы можете использовать String.split.

String[] results = input.split(",");

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

Используйте Pattern.split и прекомпилируйте шаблон, если используете сложный разделитель, и вы заботитесь о производительности

Если производительность является проблемой, а ваш разделитель не относится к числу вышеперечисленных, вам следует предварительно скомпилировать шаблон регулярного выражения, который затем можно использовать повторно.

// Save this somewhere
Pattern pattern = Pattern.compile("[,;:]");

/// ... later
String[] results = pattern.split(input);

Этот последний параметр все еще создает новый Matcher объект.Вы также можете кэшировать этот объект и сбрасывать его для каждого входа для максимальной производительности, но это несколько сложнее и не поточнобезопасно.

1 голос
/ 07 декабря 2018

можно использовать метод split

public class Demo {
    public static void main(String args[]){
        String str ="004-034556";
        if((str.contains("-"))){
            String[] temp=str.split("-");
            for(String part:temp){
                System.out.println(part);
            }
        }else{
            System.out.println(str+" does not contain \"-\".");
        }

    }
}
1 голос
/ 10 января 2018

Я просто хотел написать алгоритм вместо использования встроенных функций Java:

public static List<String> split(String str, char c){
    List<String> list = new ArrayList<>();
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str.length(); i++){
        if(str.charAt(i) != c){
            sb.append(str.charAt(i));
        }
        else{
            if(sb.length() > 0){
                list.add(sb.toString());
                sb = new StringBuilder();
            }
        }
    }

    if(sb.length() >0){
        list.add(sb.toString());
    }
    return list;
}
0 голосов
/ 08 марта 2018

Чтобы разбить строку, используется String.split (regex).Просмотрите следующие примеры:

String data = "004-034556";
String[] output = data.split("-");
System.out.println(output[0]);
System.out.println(output[1]);

Выходные данные

004
034556

Примечание. Это разделение (регулярное выражение) принимает регулярное выражение в качестве аргумента, не забудьте экранировать специальные символы регулярного выражения, например точку / точка.

0 голосов
/ 07 февраля 2013

Иногда, если вы хотите разделить string containing +, тогда оно не будет разделено; вместо этого вы получите runtime error. В этом случае сначала replace + to _, а затем разделить:

 this.text=text.replace("/", "_");
            String temp[]=text.split("_");
0 голосов
/ 22 сентября 2017
 String string = "004^034556-34";
 String[] parts = string.split(Pattern.quote("^"));

Если у вас есть специальный символ, вы можете использовать Patter.quote.Если у вас просто есть тире (-), то вы можете сократить код:

 String string = "004-34";
 String[] parts = string.split("-");

Если вы попытаетесь добавить другой специальный символ вместо тире (^) , то ошибка сгенерируется ArrayIndexOutOfBoundsException .Для этого вы должны использовать Pattern.quote.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...