Как заменить каждый пробел между 2 числами? - PullRequest
1 голос
/ 11 июня 2019

Я создаю программу для получения различных частей строки, например «10 триллионов 837 миллиардов 45 миллионов 56739». Я задал этот вопрос здесь .Но иногда моя строка выглядит как «10 триллионов 837 миллиардов 45 миллионов 56 739».Я хочу удалить пробелы между 6 и 7 в "56 739".

Я знаю, чтобы удалить пробел, но не знаю, как указать, между какими символами будет пробел для удаления

Это мой код

String input = "10 trillion 837 billion 45 million 56 739";
                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++) {
                    Toast.makeText(getApplicationContext(),strs.get(i)+"",Toast.LENGTH_LONG).show();
                }


Я пыталсядобавить оператор replaceAll следующим образом input = input.replaceAll("\\d\\s\\d","\\d\\d"); Но это не сработало

1 Ответ

2 голосов
/ 11 июня 2019

Я понял (или предположил), что вы пытаетесь убрать пробелы между числами в вашем string, поэтому

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

(?<=\\d)\\s+(?=\\d|\\-) как:

input = input.replaceAll("(?<=\\d)\\s+(?=\\d|\\-)", "");

(?<=\d) является положительным взглядом сзади, он проверяет, является ли предыдущий символ цифрой, фактически не сопоставляя его.

(?=\d) - положительный взгляд, то же самое - проверяет, является ли следующий символ цифрой, фактически не сопоставляя ее.

Вы можете проверить регулярные выражения здесь: https://regex101.com/r/pdEoKO/1/

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