Как подстроку этой строки - PullRequest
4 голосов
/ 07 июня 2019

Я хочу получить 4 части этой строки

String string = "10 trillion 896 billion 45 million 56873";

Мне нужны 4 части: «10 триллионов», «896 миллиардов», «45 миллионов» и «56873».

Что я сделал, так это удалил все пробелы и затем подставил его, но я запутался в индексах.Я видел много вопросов, но не мог понять мою проблему.

Sorry I don't have any code

Я не мог бежать, потому что не знал, что это правильно.

Ответы [ 7 ]

6 голосов
/ 07 июня 2019

Это способ легко получить решение.

String filename = "10 trillion 896 billion 45 million 56873";
String regex = " [0-9]";

String[] parts = filename.split(regex);
String part1 = parts[0]; // 10 trillion
String part2 = parts[1]; // 896 billion
String part3 = parts[2]; // 45 million
String part4 = parts[3]; // 56873

Вы также можете получить значения с помощью цикла foreach.

for(String str: parts){
    Log.i(TAG, "onCreate: parts : "+str);
}
5 голосов
/ 07 июня 2019

Вы можете использовать это регулярное выражение:

\d+(?: (?:tri|bi|mi)llion)?

Сначала он соответствует группе цифр \d+, а затем, необязательно, (?:...)?, мы сопоставляем триллион, миллиард или миллион (?:tri|bi|mi)llion.

enter image description here

Чтобы использовать это регулярное выражение,

Matcher m = Pattern.compile("\\d+(?: (?:tri|bi|mi)llion)?").matcher(string);
while (m.find()) {
    System.out.println(m.group());
}
2 голосов
/ 07 июня 2019

Ниже код будет работать. Проверьте комментарии для добавленных инструкций.

String input = "10 trillion 896 billion 45 million 56873";
        String pattern = "\\s\\d";     // this will match space and number thus will give you start of each number.
        ArrayList<Integer> inds = new ArrayList<Integer>();
        ArrayList<String> strs = new ArrayList<String>();
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(input);
        while (m.find()) {
            inds.add(m.start());          //start will return starting index.
        }

        //iterate over start indexes and each entry in inds array list will be the end index of substring. 
        //start index will be 0 and for subsequent iterations it will be end index + 1th position.
        int indx = 0;
        for(int i=0; i <= inds.size(); i++) {
            if(i < inds.size()) {
                strs.add(input.substring(indx, inds.get(i)));    
                indx = inds.get(i)+1;
            } else {
                strs.add(input.substring(indx, input.length()));
            }
        }

        for(int i =0; i < strs.size(); i++) {
            System.out.println(strs.get(i));
        }
1 голос
/ 07 июня 2019

регулярное выражение является ответом

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

final String regex = "(\\d+\\s+\\w+)|\\d+";
final String string = "10 trillion 896 billion 45 million 56873";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

Будет напечатано

Полный матч: 10 трлн

Группа 1: 10 трлн

Полный матч: 896 миллиардов

Группа 1: 896 млрд.

Полный матч: 45 миллионов

Группа 1: 45 миллионов

Полный матч: 56873

Группа 1: ноль

enter image description here

0 голосов
/ 07 июня 2019

попробуйте следующий код.

public static void main (String args []) { String str = "10 триллионов 896 миллиардов 45 миллионов 56873";

    String[] strlist = str.split(" ");

    for (int i = 0; i < strlist.length; i++) {
        String data=textNumber(strlist[i], (i+1<strlist.length?strlist[i + 1]:""));
        if (data != null) {
            System.out.println(data);
            i++;
        }
    }

}
public static String textNumber(String str1,String str2){

    if(str1.matches("[0-9]+")){
        if(str2.matches("[a-zA-Z]+")) {
            return  str1 + " " + str2;
        }
        return str1;
    }
     return null;
}
0 голосов
/ 07 июня 2019

Попробуйте этот шаблон.

([^\s]+\s+[^\s]+|[^\s]+)

enter image description here

0 голосов
/ 07 июня 2019

Вы можете использовать следующее выражение Regex:

String string = "10 trillion 896 billion 45 million 56873";
String[] array = string.split("(?<!\\G\\w+)\\s");

По сути, мы разделяемся на каждый второй пробел, а не на каждый пробел.

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