Почему у моего массива String длина 3 вместо 2? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь понять регулярное выражение.Я хотел создать строку [], используя split, чтобы показать, сколько букв содержится в данном строковом выражении?

import java.util.*; 
import java.io.*;

public class Main {

  public static String simpleSymbols(String str) {

     String result = "";
     String[] alpha = str.split("[\\+\\w\\+]");
     int alphaLength = alpha.length;
     // System.out.print(alphaLength);

     String[] charCount = str.split("[a-z]");
     int charCountLength = charCount.length;
     System.out.println(charCountLength);
   }
}

Моя входная строка "+d+=3=+s+".Я разделил строку, чтобы посчитать количество букв в строке.Длина массива должна быть два, но я получаю три.Кроме того, я пытаюсь сделать регулярное выражение, чтобы проверить шаблон + b +, где b - любая буква в алфавите?Это правильно?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Итак, несколько вещей появляются у меня:

Во-первых, ваше регулярное выражение выглядит правильно.Если вы когда-либо беспокоились о том, как будет работать ваше регулярное выражение, вы можете использовать https://regexr.com/, чтобы проверить это.Просто поместите свое регулярное выражение сверху и введите строку внизу, чтобы увидеть, соответствует ли она правильно

Во-вторых, после тщательного изучения я вижу, что вы используете функцию разделения.Хотя это удобно для быстрого разделения строк, вы должны быть осторожны в отношении того, что вы разделяете.В этом случае вы удаляете все строки, на которые изначально смотрели, что делает невозможным их поиск.Если вы распечатаете его, вы заметите следующее (для входной строки + d + = 3 = + s +):

+
+=3=+
+

Что показывает, что вы случайно вырезали то, что искали, чтобы найтина первом месте.Теперь есть несколько способов исправить это, в зависимости от ваших критериев.

Теперь, если вы хотели просто разделить все + и не важно, что вы нашли только то, что непосредственно ограничено + s, тогда split работает великолепно.Просто сделайте str.split("+"), и это вернет вам список следующего (для + d + = 3 = + s +):

d
=3=
s

Однако вы можете видеть, что это создает несколько проблем.Во-первых, он не удаляет = 3 = то, что нам не нужно, а во-вторых, он не дает нам значений, которые заключены в формат + _ +, где подчеркивание представляет строку / символ, который выищу.

Видя, как вы используете + w, вы намерены найти слова, которые окружены + s.Однако, если вы просто ищете один символ, я бы предложил использовать другой, например, [az] или [a-zA-Z], чтобы быть более конкретным.Однако, если вы хотите найти несколько букв алфавита, ваш шаблон в порядке.Вы также можете добавить * (0 или более) или + (1 или более) в конце шаблона, чтобы указать, что именно вы ищете.

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

Кроме того, для дальнейшего использования всегда следует запускать имя функциив нижнем регистре, по крайней мере, в Java.Только прописные и имена классов должны начинаться с заглавной буквы :)

0 голосов
/ 16 мая 2019

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

Регулярное выражение в функциях разделения используется в качестве разделителей и не будет отображаться в результатах. В вашем случае «str.split ([a-z])» означает использование алфавитов в качестве разделителей для разделения входной строки, что составляет три подстроки «(+) | d | (+ = 3 = +) | s | (+)».

Если вы действительно хотите посчитать количество букв, используя «split», используйте «str.split (« [^ a-z] »)». Но я бы порекомендовал использовать «java.util.regex.Matcher.find ()», чтобы найти все буквы.

Кроме того, я пытаюсь сделать регулярное выражение для проверки шаблона + b +, где b - любая буква в алфавите? Это правильно?

Аналогичным образом проверьте функции в "java.util.regex.Matcher".

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