StringTokenizer(String str, String delimiters,

Boolean delimAsToken);

Некие способы:

String nextToken() – возвращает лексему как String объект;

boolean hasMoreTokens() – возвращает true, если одна либо несколько лексем остались в строке;

int сountToken()– возвращает число лексем.

Класс был реализован в самой первой версии языка. Но в текущее время есть более совершенные средства по обработке текстовой инфы – постоянные выражения.

Постоянные выражения

Класс java StringTokenizer(String str, String delimiters,.util.regex.Pattern применяется для определения постоянных выражений (шаблонов), для которых ищется соответствие в строке, файле либо другом объекте, представляющем последовательность знаков. Для определения шаблона используются особые синтаксические конструкции. О каждом согласовании можно получить информацию при помощи класса java.util.regex.Matcher.

Дальше приведены главные логические конструкции для задания шаблона StringTokenizer(String str, String delimiters,.

Если в строке, проверяемой на соответствие, нужно, чтоб в какой-нибудь позиции находился один из знаков некого символьного набора, то таковой на­бор (класс знаков) можно объявить, используя одну из последующих конструкций:

[abc] a, b либо c
[^abc] знак, исключая a, b и c
[a-z] знак меж a StringTokenizer(String str, String delimiters, и z
[a-d[m-p]] или меж a и d, или меж m и p
[e-z&&[dem]] e или m (конъюнкция)

Не считая стандартных классов знаков, есть предопределенные классы знаков:

. хоть какой знак
\d [0-9]
\D [^0-9]
\s [ \t\n\x0B\f\r]
\S [^\s]
\w [a StringTokenizer(String str, String delimiters,-zA-Z_0-9]
\W [^\w]
\p{javaLowerCase} ~ Character.isLowerCase()
\p{javaUpperCase} ~ Character.isUpperCase()

При разработке постоянного выражения могут употребляться логические операции:

ab после a следует b
a|b a или b
(a) a

Скобки, не считая их логического предназначения, также употребляются для выделения групп.

Для определения постоянных выражений недостаточно одних классов знаков StringTokenizer(String str, String delimiters,, т. к. в шаблоне нередко необходимо указать количество повторений. Для этого есть квантификаторы.

a? a один раз либо никогда
a* a ноль либо более раз
a+ a один либо более раз
a{n} a n раз
a{n,} a n либо более раз
a{n,m} a от n до StringTokenizer(String str, String delimiters, m

Существует еще два типа квантификаторов, которые образованы прибавлением суффикса ?(слабенькое, либо неполное совпадение) либо + («жадное», либо собственное совпадение) к перечисленным выше квантификаторам. Неполное совпадение соответствует выбору с менее вероятным количеством знаков, а собственное – с очень вероятным.

Класс Pattern употребляется для обычной обработки строк. Для более сложной обработки строк StringTokenizer(String str, String delimiters, употребляется класс Matcher, рассматриваемый ниже.

В классе Pattern объявлены последующие способы:

Pattern compile(String regex) – возвращаетPattern, который соответствует regex.

Matcher matcher(CharSequence input) – возвращает Matcher,
при помощи которого можно отыскивать соответствия в строке input.

boolean matches(String regex, CharSequence input)– инспектирует на соответствие строчки input шаблону regex.

String pattern()– возвращает строчку, подобающую шаблону.

String[] split(CharSequence StringTokenizer(String str, String delimiters, input)– разбивает строчку input, беря во внимание, что разделителем является шаблон.

String[] split(CharSequence input, int limit)– разбивает строчку input на менее чем limit частей.

При помощи способа matches() класса Pattern можно инспектировать на соответствие шаблону целой строчки, но если нужно отыскать соответствия снутри строчки, к примеру, определять участки, которые соответствуют шаблону, то класс StringTokenizer(String str, String delimiters, Pattern не может быть применен. Для таких операций нужно использовать класс Matcher.

Изначальное состояние объекта типа Matcher не определено. Попытка выз­вать какой-нибудь способ класса для извлечения инфы о отысканном согласовании приведет к появлению ошибки IllegalStateException. Для того чтоб начать работу с объектом Matcher, необходимо вызвать один из его способов:

boolean matches() – инспектирует StringTokenizer(String str, String delimiters,, соответствует ли вся строчка шаблону;

boolean lookingAt()– пробует отыскать последовательность знаков, начинающуюся с начала строчки и подобающую шаблону;

boolean find() либо boolean find(int start) – пробует отыскать последовательность знаков, соответственных шаблону, в любом месте строчки. Параметр start показывает на исходную позицию поиска.

Время от времени нужно скинуть состояние Matcher’а в StringTokenizer(String str, String delimiters, начальное, для этого применяется способ reset()либо reset(CharSequence input), который также устанавливает новейшую последовательность знаков для поиска.

Для подмены всех подпоследовательностей знаков, удовлетворяющих шаблону, на заданную строчку можно применить способ replaceAll(String
replacement)
.

Для того чтоб ограничить поиск границами входной последовательности, применяется способ region(int start, int StringTokenizer(String str, String delimiters, end), а для получения значения этих границ – regionEnd() и regionStart(). С регионами связано несколько способов:

Matcher useAnchoringBounds(boolean b) – если установлен в true, то начало и конец региона соответствуют символам ^ и $ соответственно.

boolean hasAnchoringBounds() – инспектирует закрепленность границ.

В постоянном выражении для более комфортной обработки входной после­довательности используются группы, которые помогают выделить StringTokenizer(String str, String delimiters, части отысканной подпоследовательности. В шаблоне они обозначаются скобками “(“ и “)”. Номера групп начинаются с единицы. Нулевая группа совпадает со всей отысканной подпоследовательностью. Дальше приведены способы для извлечения инфы о группах.

int end() – возвращает индекс последнего знака подпоследовательности, удовлетворяющей шаблону;

int end(int group) – возвращает индекс последнего знака StringTokenizer(String str, String delimiters, обозначенной группы;

String group() – возвращает всю подпоследовательность, удовлетворяющую шаблону;

String group(int group) – возвращает определенную группу;

int groupCount() – возвращает количество групп;

int start() – возвращает индекс первого знака подпоследовательности, удовлетворяющей шаблону;

int start(int group) – возвращает индекс первого знака обозначенной группы;

boolean hitEnd() – возвращает правду, если был достигнут конец входной последовательности StringTokenizer(String str, String delimiters,.

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

/* пример # 14 : обработка строк при помощи шаблонов : DemoRegular.java */

packagechapt07;

import java.util.regex.*;

public class DemoRegular {

public static void main(String[] args) {

//проверка на соответствие строчки шаблону

Pattern p1 = Pattern.compile("a+y");

Matcher m1 = p1.matcher("aaay");

boolean b = m1.matches StringTokenizer(String str, String delimiters,();

System.out.println(b);

//поиск и выбор подстроки, данной шаблоном

String regex =

"(\\w+)@(\\w+\\.)(\\w+)(\\.\\w+)*";

String s =

"адреса эл.почты:mymail@tut.by и rom@bsu.by";

Pattern p2 = Pattern.compile(regex);

Matcher m2 = p2.matcher(s);

while (m2.find())

System.out.println("e-mail: " + m2.group());

//разбивка строчки StringTokenizer(String str, String delimiters, на подстроки с применением шаблона в качестве разделителя

Pattern p3 = Pattern.compile("\\d+\\s?");

String[] words =

p3.split("java5tiger 77 java6mustang");

for (String word : words)

System.out.println(word);

}

}

В итоге будет выведено:

True

e-mail: mymail@tut.by

e-mail: rom@bsu.by

Java

Tiger

Java

Mustang

Последующий пример указывает, как использовать группы, также собственные и неполные StringTokenizer(String str, String delimiters, квантификаторы.

/* пример # 15 : группы и квантификаторы : Groups.java */

packagechapt07;

public class Groups {

public static void main(String[] args) {

String input = "abdcxyz";

myMatches("([a-z]*)([a-z]+)", input);

myMatches("([a-z]?)([a-z]+)", input);

myMatches("([a-z]+)([a-z]*)", input);

myMatches("([a-z]?)([a-z]?)", input);

}

public static void myMatches(String regex StringTokenizer(String str, String delimiters,,

String input) {

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher(input);

if(matcher.matches()) {

System.out.println("First group: "

+ matcher.group(1));

System.out.println("Second group: "

+ matcher.group(2));

} else

System.out.println("nothing");

System.out.println();

}

}

Итог работы программки:

First group: abdcxy

Second group: z

First group: a

Second group: bdcxyz

First group: abdcxyz

Second group:

Nothing

В StringTokenizer(String str, String delimiters, первом случае к первой группе относятся все вероятные знаки, но при всем этом остается малое количество знаков для 2-ой группы.

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

В 3-ем случае первой группе будет соответствовать вся строчка, а для 2-ой StringTokenizer(String str, String delimiters, не остается ни 1-го знака, потому что 2-ая группа употребляет слабенькое совпадение.

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

В классе Matcher объявлены два нужных способа для подмены отысканных подпоследовательностей во входной строке.

Matcher appendReplacement(StringBuffer sb, String
replacement)
– способ StringTokenizer(String str, String delimiters, читает знаки из входной стоки и добавляет их в sb. Чтение останавливается на start()-1 позиции предшествующего совпадения, после этого происходит добавление в sb строчки replacement. При последующем вызове этого способа делается добавление знаков, начиная с знака с индексом end() предшествующего совпадения.

StringBuffer appendTail(StringBuffer sb) – добавляет оставшуюся часть знаков из входной последовательности в StringTokenizer(String str, String delimiters, sb. Обычно, вызывается после 1-го либо нескольких вызовов способа appendReplacement().

Интернационализация текста

Классjava.util.Locale позволяет учитывать особенности региональных представлений алфавита, знаков и проч. Автоматом виртуальная машина употребляет текущие региональные установки операционной системы, но по мере надобности их можно изменять. Для неких государств региональные характеристики инсталлируются при помощи констант, к примеру: Locale.US, Locale StringTokenizer(String str, String delimiters,.FRANCE. Для других государств объект Localeнеобходимо создавать с по­мощью конструктора:

Locale myLocale = new Locale("bel", "BY");

Получить доступ к текущему варианту региональных характеристик можно последующим образом:

Locale current = Locale.getDefault();

Если, к примеру, в ОС установлен регион «Россия» либо в приложении при помощи new Locale("ru", "RU"), то последующий StringTokenizer(String str, String delimiters, код (при выводе результатов выполнения на консоль)

current.getCountry();//код региона

current.getDisplayCountry();//заглавие региона

current.getLanguage();//код языка региона

current.getDisplayLanguage();//заглавие языка региона

позволяет получить информацию о регионе в виде:

RU

Наша родина

ru

российский

Для сотворения приложений, поддерживающих несколько языков, существует целый ряд решений. Самое логичное из их – внедрение взаимодействия классов StringTokenizer(String str, String delimiters, java.util.ResourceBundle и Locale. КлассResourceBundle предназначен сначала для работы с текстовыми файлами параметров (расширение .properties). Каждый объект ResourceBundle представляет собой набор объектов соответственных подтипов, которые делят одно и то же базисное имя, к которому можно получить доступ через поле parent. Последующий перечень указывает вероятный набор соответственных ресурсов с базисным именованием text. Знаки, последующие за базисным именованием StringTokenizer(String str, String delimiters,, демонстрируют код языка,
код стра­ны и тип операционной системы. К примеру, файл text_de_CH.properties соответствует объекту Locale, данному кодом языка германского (de) и кодом страны Швейцарии (CH).

Text.properties

Text_ru.properties

Text_de_CH.properties


stroenie-elektronnih-obolochek-atoma.html
stroenie-eukarioticheskoj-i-prokarioticheskoj-kletok-referat.html
stroenie-fermentov-i-kofermentov.html