Как преобразовать string в массив char java
Перейти к содержимому

Как преобразовать string в массив char java

  • автор:

java

Очень большое место в обработке информации занимает работа с текстами. Как и многое другое, текстовые строки в языке Java являются объектами. Они представляются экземплярами класса string или класса stringBuffer .

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

Конечно, возможно занести текст в массив символов типа char или даже в массив байтов типа byte , но тогда вы не сможете использовать готовые методы работы с текстовыми строками.

Зачем в язык введены два класса для хранения строк? В объектах класса string хранятся строки-константы неизменной длины и содержания, так сказать, отлитые в бронзе. Это значительно ускоряет обработку строк и позволяет экономить память, разделяя строку между объектами, использующими ее. Длину строк, хранящихся в объектах класса stringBuffer , можно менять, вставляя и добавляя строки и символы, удаляя подстроки или сцепляя несколько строк в одну строку. Во многих случаях, когда надо изменить длину строки типа string , компилятор Java неявно преобразует ее к типу stringBuffer , меняет длину, потом преобразует обратно в тип string . Например, следующее действие

String s = «Это» + » одна » + «строка»;
компилятор выполнит так:
String s = new StringBuffer().append(«Это»).append(» одна «)
.append(«строка»).toString();

Будет создан объект класса stringBuffer , в него последовательно добавлены строки «Это», » одна «, «строка», и получившийся объект класса StringBuffer будет приведен к типу String методом toString () .

Напомним, что символы в строках хранятся в кодировке Unicode, в которой каждый символ занимает два байта. Тип каждого символа char .

Класс String
Перед работой со строкой ее следует создать. Это можно сделать разными способами.
Создать строку
Самый простой способ создать строку — это организовать ссылку типа string на строку-константу:
String si = «Это строка.»;

Если константа длинная, можно записать ее в нескольких строках текстового редактора, связывая их операцией сцепления:

String s2 = «Это длинная строка, » +
«записанная в двух строках исходного текста»;
Замечание

Не забывайте разницу между пустой строкой string s = «» , не содержащей ни одного символа, и пустой ссылкой string s = null, не указывающей ни на какую строку и не являющейся объектом.

Самый правильный способ создать объект с точки зрения ООП — это вызвать его конструктор в операции new. Класс string предоставляет вам девять конструкторов:

  • string() — создается объект с пустой строкой;
  • string (String str) — из одного объекта создается другой, поэтому этот конструктор используется редко;
  • string (StringBuf fer str) — преобразованная коп-ия объекта класса BufferString;
  • string(byte[] byteArray) — объект создается из массива байтов byteArray;
  • String (char [] charArray) — объект создается из массива charArray символов Unicode;
  • String (byte [] byteArray, int offset, int count) — объект создается из части массива байтов byteArray, начинающейся с индекса offset и содержащей count байтов;
  • String (char [] charArray, int offset, int count) — то же, но массив состоит из символов Unicode;
  • String(byte[] byteArray, String encoding) — символы, записанные в массиве байтов, задаются в Unicode-строке, с учетом кодировки encoding ;
  • String(byte[] byteArray, int offset, int count, String encoding) — то же самое, но только для части массива.

При неправильном заданий индексов offset , count или кодировки encoding возникает исключительная ситуация.

Конструкторы, использующие массив байтов byteArray , предназначены для создания Unicode-строки из массива байтовых ASCII-кодировок символов. Такая ситуация возникает при чтении ASCII-файлов, извлечении информации из базы данных или при передаче информации по сети.

В самом простом случае компилятор для получения двухбайтовых символов Unicode добавит к каждому байту старший нулевой байт. Получится диапазон ‘ \u0000 ‘ — ‘ \u00ff ‘ кодировки Unicode, соответствующий кодам Latin 1. Тексты на кириллице будут выведены неправильно.

Если же на компьютере сделаны местные установки, как говорят на жаргоне «установлена локаль» (locale) (в MS Windows это выполняется утилитой Regional Options в окне Control Panel ), то компилятор, прочитав эти установки, создаст символы Unicode, соответствующие местной кодовой странице. В русифицированном варианте MS Windows это обычно кодовая страница СР1251.

Если исходный массив с кириллическим ASCII-текстом был в кодировке СР1251, то строка Java будет создана правильно. Кириллица попадет в свой диапазон ‘\u0400’—’\u04FF’ кодировки Unicode.

Сцепление строк

Со строками можно производить операцию сцепления строк (concatenation), обозначаемую знаком плюс +. Эта операция создает новую строку, просто составленную из состыкованных первой и второй строк, как показано в начале данной главы. Ее можно применять и к константам, и к переменным. Например:
String attention = «Внимание: «;
String s = attention + «неизвестный символ»;
Вторая операция — присваивание += — применяется к переменным в левой части:
attention += s;
Поскольку операция + перегружена со сложения чисел на сцепление строк, встает вопрос о приоритете этих операций. У сцепления строк приоритет выше, чем у сложения, поэтому, записав «2» + 2 + 2 , получим строку » 222 «. Но, записав 2 + 2 + «2» , получим строку «42», поскольку действия выполняются слева направо. Если же запишем «2» + (2 + 2) , то получим «24» .

Выбрать символы из строки

  • ссылка dst = null ;
  • индекс begin отрицателен;
  • индекс begin больше индекса end ;
  • индекс end больше длины строки;
  • индекс ind отрицателен;
  • ind + (end — begin) > dst.length.

Выбрать подстроку

Метод substring(int begin, int end) выделяет подстроку от символа с индексом begin включительно до символа с индексом end исключительно. Длина подстроки будет равна end — begin .
Метод substring (int begin) выделяет подстроку от индекса begin включительно до конца строки.
Если индексы отрицательны, индекс end больше длины строки или begin больше чем end , то возникает исключительная ситуация.
Например, после выполнения
String s = «Write onсe, run anywhere.»;
String sub1 = s.substring(6, 10);
String sub2 = s.substring(16);
получим в строке sub1 значение » once «, а в sub2 — значение » anywhere «.

Сравнить строки

  1. Сравниваются символы данной строки this и строки str с одинаковым индексом, пока не встретятся различные символы с индексом, допустим k , или пока одна из строк не закончится.
  2. В первом случае возвращается значение this.charAt(k) — str.charAt(k), т. е. разность кодировок Unicode первйх несовпадающих символов.
  3. Во втором случае возвращается значение this.length() — str.length() , т. е. разность длин строк.
  4. Если строки совпадают, возвращается 0.
  • хотя бы один из индексов ind1 или ind2 отрицателен;
  • хотя бы одно из ind1 + len или ind2 + len больше длины соответствующей строки;
  • хотя бы одна пара символов не совпадает.

Найти символ в строке

Поиск всегда ведется с учетом регистра букв.
Первое появление символа ch в данной строке this можно отследить методом indexOf(int ch) , возвращающим индекс этого символа в строке или -1 , если символа ch в строке this нет.
Например, «Молоко», indexOf(‘о’) выдаст в результате 1 .
Конечно, этот метод выполняет в цикле последовательные сравнения this.charAt(k++> == ch , пока не получит значение true .
Второе и следующие появления символа ch в данной строке this можно отследить методом indexOf(int ch, int ind) .
Этот метод начинает поиск символа ch с индекса ind . Если ind < о, то поиск идет с начала строки, если ind больше длины строки, то символ не ищется, т. е. возвращается -1.
Например, «молоко».indexof(‘о’, indexof (‘о’) + 1) даст в результате 3. .
Последнее появление символа ch в данной строке this отслеживает метод lastIndexof (int ch). Он просматривает строку в обратном порядке. Если символ ch не найден, возвращается.-1.
Например, «Молоко».lastindexof(‘о’) даст в результате 5.
Предпоследнее и предыдущие появления символа ch в данной строке this можно отследить методом lastIndexof (int ch, int ind) , который просматривает строку в обратном порядке, начиная с индекса ind .
Если ind больше длины строки, то поиск идёт от конца строки, если ind < о, то возвращается-1.

Найти подстроку

Поиск всегда ведется с учетом регистра букв.
Первое вхождение подстроки sub в данную строку this отыскивает метод indexof (String sub). Он возвращает индекс первого символа первого вхождения подстроки sub в строку или -1, если подстрока sub не входит в строку this . Например, » Раскраска «.indexof («рас») даст в результате 4.
Если вы хотите начать поиск не с начала строки, ас какого-то индекса ind , используйте метод indexOf (String sub, int ind). если i nd < 0 , то поиск идет с начала строки, если ind больше .длины строки, то символ не ищется, т. е. возвращается -1.
Последнее вхождение подстроки sub в данную строку this можно отыскать методом lastindexof ( string sub ), возвращающим индекс первого символа последнего вхождения подстроки sub в строку this или (-1), если подстрока sub не входит в строку this .
Последнее вхождение подстроки sub не во всю строку this , а только в ее начало до индекса ind можно отыскать методом l astIndexof(String stf, int ind ). Если ind больше длины строки, то .поиск идет от конца строки, если ind < о , то возвращается -1.
Для того чтобы проверить, не начинается ли данная строка this с подстроки sub , используйте логический метод startsWith(string sub) , возвращающий true , если данная строка this начинается с подстроки sub , или совпадает с ней, или подстрока sub пуста.
Можно проверить и появление подстроки sub в данной строке this , начиная с некоторого индекса ind логическим методом s tartsWith(String sub),int ind). Если индекс ind отрицателен или больше длины строки, возвращается false .
Для того чтобы проверить, не заканчивается ли данная строка this подстрокой sub , используйте логический метод endsWitht(String sub) . Учтите, что он возвращает true , если подстрока sub совпадает со всей строкой или подстрока sub пуста.
Например, if (fileName.endsWith(«. Java»)) отследит имена файлов с исходными текстами Java.
Перечисленные выше методы создают исключительную ситуацию, если
sub == null.
Если вы хотите осуществить поиск, не учитывающий регистр букв, измените предварительно регистр всех символов строки.

Изменить регистр букв

Метод toLowerCase () возвращает новую строку, в которой все буквы переведены в нижний регистр, т. е. сделаны строчными.
Метод toUpperCase () возвращает новую строку, в которой все буквы переведены в верхний регистр, т. е. сделаны прописными.
При этом используется локальная кодовая таблица по умолчанию. Если нужна другая локаль, то применяются методы toLowerCase(Locale l oc ) и toUpperCase(Locale loc).

Заменить отдельный символ

Метод replace (int old, int new) возвращает новую строку, в которой все вхождения символа old заменены символом new . Если символа old в строке нет, то возвращается ссылка на исходную строку.
Например, после выполнения » Рука в руку сует хлеб» , replace (‘у’, ‘е’) получим строку » Река в реке сеет хлеб».
Регистр букв при замене учитывается.

Преобразовать данные другого типа в строку

В языке Java принято соглашение — каждый класс отвечает за преобразование других типов в тип этого класса и должен содержать нужные для этого методы.
Класс string содержит восемь статических методов valueof (type elem) преобразования В строку примитивных типов boolean, char, int, long, float, double , массива char[] , и просто объекта типа object .
Девятый метод valueof(char[] ch, int offset, int len) преобразует в строку подмассив массива ch , начинающийся с индекса offset и имеющий len элементов.
Кроме того, в каждом классе есть метод tostring () , переопределенный или просто унаследованный от класса Object . Он преобразует объекты класса в строку. Фактически, метод valueOf о вызывает метод tostring() соответствующего класса. Поэтому результат преобразования зависит от того, как реализован метод tostring ().
Еще один простой способ — сцепить значение elem какого-либо типа с пустой строкой: «» + elem. При этом неявно вызывается метод elem. toString ().

Класс StringBuffer

Объекты класса StringBuffer — это строки переменной длины. Только что созданный объект имеет буфер определенной емкости (capacity), по умолчанию достаточной для хранения 16 символов. Емкость можно задать в конструкторе объекта.
Как только буфер начинает переполняться, его емкость автоматически увеличивается, чтобы вместить новые символы.
В любое время емкость буфера можно увеличить, обратившись к методу ensureCapacity(int minCapacity)
Этот метод изменит емкость, только если minCapacity будет больше длины хранящейся в объекте строки. Емкость будет увеличена по следующему правилу. Пусть емкость буфера равна N. Тогда новая емкость будет равна
Мах(2 * N + 2, minCapacity)
Таким образом, емкость буфера нельзя увеличить менее чем вдвое.
Методом setLength (int newLength) можно установить любую длину строки.
Если она окажется больше текущей длины, то дополнительные символы будут равны ‘ \uOOOO’ . Если она будет меньше текущей длины, то строка будет обрезана, последние символы потеряются, точнее, будут заменены символом ‘\uOOOO’ . Емкость при этом не изменится.
Если число newLength окажется отрицательным, возникнет исключительная ситуация.
Совет

Будьте осторожны, устанавливая новую длину объекта.

Количество символов в строке можно узнать, как и для объекта класса String , методом length () , а емкость — методом capacity ().
Создать объект класса stringBuf fer можно только конструкторами.

В классе stringBuffer три конструктора:
stringBuffer () — создает пустой объект с емкостью 16 символов;
stringBuffer .(int capacity) — создает пустой объект заданной емкости capacity ;
StringBuffer (String str) — создает объект емкостью str . length () + 16, содержащий строку str .

В классе stringBuffer есть десять методов append (), добавляющих подстроку в конец строки. Они не создают новый экземпляр строки, а возвращают ссылку на ту же самую, но измененную строку.

Основной метод append (string str) присоединяет строку str в конец данной строки. Если ссылка str == null, то добавляется строка «null».

Шесть методов append (type elem) добавляют примитивные типы boolean, char, int, long, float, double, преобразованные в строку.

Два метода присоединяют к строке массив str и подмассив sub символов,
преобразованные в строку: append (char [] str) И append (char [.] , sub, int offset, int len).

Десятый метод добавляет просто объект append (Object obj). Перед этим объект obj преобразуется в строку своим методом tostring ().

Десять методов insert () предназначены для вставки строки, указанной параметром метода, в данную строку. Место вставки задается первым параметром метода ind . Это индекс элемента строки, перед которым будет сделана вставка. Он должен быть неотрицательным и меньше длины строки, иначе возникнет исключительная ситуация. Строка раздвигается, емкость буфера при необходимости увеличивается. Методы возвращают ссылку ни ту же преобразованную строку.

Основной метод insert (int ind, string str) вставляет строку str в данную строку перед ее символом с индексом and . Если ссылка s tr == null вставляется строка «null».
Например, после выполнения
String s = new StringBuffer(«Это большая строка»). insert(4, «не»).toString();
ПОЛУЧИМ s == «Это небольшая строка».
Метод sb.insert(sb.length о, «xxx») будет работать так же, как метод
sb.append(«xxx») .
Шесть методов insert (int ind, type elem) вставляют примитивные типы boolean, char, int, long, float, double, преобразованные в строку.
Два метода вставляют массив str и подмассив sub символов, преобразованные в строку:
i nsert(int ind, chart] str)
insert(int ind, char[] sub, int offset, int len)
Десятый метод вставляет просто объект :
insert(int ind, Object obj)
Объект obj перед добавлением преобразуется в строку своим методом
toString ().

Метод delete tint begin, int end) удаляет из строки символы, начиная с индекса begin включительно до индекса end исключительно, если end больше длины строки, то до конца строки.
Например, после выполнения
String s = new StringBuffer(«Это небольшая строка»).
delete(4, 6).toString();
получим s == «Это большая строка».
Если begin отрицательно, больше длины строки или больше end , возникает исключительная ситуация.
Если begin == end, удаление не происходит.

Метод deieteCharAt (int ind) удаляет символ с указанным индексом ind . Длина строки уменьшается на единицу.
Если индекс ind отрицателен или больше длины строки, возникает исключительная ситуация.

Метод replace (int begin, int end. String str ) удаляет символы из строки, начиная с индекса begin включительно до индекса end исключительно, если end больше длины строки, то до конца строки, и вставляет вместо них строку str .
Если begin отрицательно, больше длины строки или больше end , возникает исключительная ситуация.
Разумеется, метод replace () — это последовательное выполнение методов
delete () и insert ().

Метод reverse о меняет порядок расположения символов в строке на обратный порядок.
Например, после выполнения
String s = new StringBuffer(«Это небольшая строка»),
reverse().toString();
получим s == «акортс яашьлобен отЭ».

РАБОТА СО СТРОКАМИ В JAVA. ОСНОВНЫЕ МЕТОДЫ КЛАССА STRING. — учебник java — java programming — учиться java — java basics — java for beginners

Строка в Java является объектом, поэтому ее можно создать, как и любой другой объект, при помощи оператора new.

  • Также строку можно создать при помощи литерала (фразы заключенной в кавычки) следующим образом.

методы java

Определение количества символов в строке

Для того чтобы определить количество символов в строке, используется метод length. int length() — возвращает длину строки. Длина равна количеству символов Unicode в строке.

Пример 4:

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

  • Если мы хотим работать со строкой, как с массивом символов, можем конвертировать строку в массив при помощи метода toCharArray.
  • char[] toCharArray() — преобразует строку в новый массив символов.
  • Пример 6: поменять в строке символы пробела на точки при помощи преобразования в массив символов (для этой задачи есть более простое решение, нежели преобразование в массив, но об этом чуть позже).

Примечание: в данном случае мы не сможем использовать метод charAt. При помощи этого метода мы бы смогли только найти пробелы в строке, но не поменять их.

 String str = "1 000 000 000"; //преобразовываем строку в массив char[] chArray = str.toCharArray(); //перебираем все элементы массива for(int i = 0; i > //выводим результат System.out.println(chArray);

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

Извлечение подстроки из строки

  • String substring(int beginIndex, int endIndex) или substring(int beginIndex) — возвращает новую строку, которая является подстрокой используемой строки.
  • В параметрах метода нужно указать индекс строки, с которого начинается подстрока и индекс, которым заканчивается.
  • Также возможно указывать только начальный индекс. В этом случае будет возвращена подстрока от начального индекса и до конца строки.

Пример 7.

 String s = "www.mysite.com"; String name = s.substring(4, s.length()-4); System.out.println(name); // на консоль выведет "mysite" String domain = s.substring(4); System.out.println(domain); // на консоль выведет "mysite.com"

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

Разбиение строк

  • Для разбиения строк на части используется метод String[] split(String regex), который разбивает строку на основании заданного регулярного выражения.
  • О регулярных выражениях поговорим в одном из следующих уроков. Здесь покажем пример простого разбиения строки заданного одним символом.

Пример 8.

 String isbn = "978-3-16-148410-0"; String[] isbnParts = isbn.split("-"); System.out.println("префикс EAN.UCC: " + isbnParts[0]); System.out.println("номер регистрационной группы: " + isbnParts[1]); System.out.println("номер регистранта: " + isbnParts[2]); System.out.println("номер издания: " + isbnParts[3]); System.out.println("контрольная цифра: " + isbnParts[4]);

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

Поиск в строке

  • boolean contains(CharSequence s) — проверяет, содержит ли строка заданную последовательность символов и возвращает true или false.

Пример 9.

 String s = "www.mysite.com"; boolean isContain1 = s.contains("mysite"); System.out.println(isContain1);// нашел - выведет true boolean isContain2 = s.contains("mysite.ru"); System.out.println(isContain2);// не нашел - выведет false

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

boolean endsWith(String suffix) — проверяет завершается ли строка определенными символами и возвращает true или false.

Пример 10.

 String s = "www.mysite.com"; //проверяем заканчивается ли строка суффиксом "com" boolean isComEnding = s.endsWith("com"); System.out.println(isComEnding);//выведет true //проверяем заканчивается ли строка суффиксом "ru" boolean isRuEnding = s.contains("ru"); System.out.println(isRuEnding);//выведет false

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

Пример 11.

 String s = "www.mysite.com"; //Проверяем, начинается ли адрес с www boolean isWWW = s.startsWith("www"); if(isWWW)< /* Eсли да, проверяем начинается ли имя сайта с "my". Поскольку адрес начинается с www проверку начинаем с 4 символа*/ boolean isNameStarts = s.startsWith("my", 4); >else< /* Eсли нет, проверяем начинается ли имя сайта с "my". Поскольку адрес не начинается с www проверку производим с начала строки*/ boolean isNameStarts = s.startsWith("my"); >

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

  • int indexOf(int ch), indexOf(int ch, int fromIndex), indexOf(String str), indexOf(String str, int fromIndex) — метод indexOf применяется для поиска первого вхождения указанного символа в строке или первого вхождения указанной подстроки.
  • Поиск также можно произвести с указанием позиции в строке от которой нужно начинать искать. Для поиска нужно указать соответствующие параметры.
  • Метод возвращает число соответствующее индексу первого вхождения символа или подстроки. В случае отсутствия указанного символа или подстроки в строке, будет возвращена -1.

Пример 12

 String data = "name:Igor\nsurname:Kolashnikov\nage:14\ntime:14:55"; //разбиваем строку на несколько подстрок на основании // встречаемого символа новой строки String[]lines=data.split("\n"); //проходим каждую подстроку for (String line : lines)< //находим индекс первого вхождения символа ":" в подстроке int pos = line.indexOf(":"); //вычленяем имя атрибута из подстроки String attributeName= line.substring(0,pos); //вычленяем значение атрибута String value = line.substring(pos+1,line.length()); //вывод на экран вычлененных значений в нужном нам формате. System.out.println(attributeName + " - " + value); >

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

int lastIndexOf(int ch), lastIndexOf(int ch, int fromIndex), lastIndexOf(String str), lastIndexOf(String str, int fromIndex) — аналогично предыдущему случаю, только ищется последнее вхождение символа или подстроки в строке.

Модификация строк

Модификация строк не является модификацией как таковой. Дело в том, что объекты класса String после создания уже нельзя изменять. Но можно создать копию строки с изменениями. Именно это и делают следующие методы.

  • toLowerCase() — преобразовать строку в нижний регистр;
  • toUpperCase() — преобразовать строку в верхний регистр;
  • trim() — отсечь на концах строки пустые символы;

Пример 13

 String str = " Я помню ЧУДНОЕ мгновенье "; //убрали символы пробела в начале и конце строки str = str.trim(); //я помню чудное мгновенье System.out.println(str.toLowerCase()); //Я ПОМНЮ ЧУДНОЕ МГНОВЕНЬЕ System.out.println(str.toUpperCase());

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

  • String replace(char oldChar, char newChar), replace(CharSequence target, CharSequence replacement) — замена в строке одного символа или подстроки на другой символ или подстроку.
  • Вспомним пример 6, где нужно было поменять в строке символы пробела на точки и перепишем его с использованием replace:
 String str = "1 000 000 000"; String newStr = str.replace(" ", "."); System.out.println(newStr);

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

Сравнение строк

boolean equals(Object anObject) — проверяет идентичность строк. Возвращает true только в том случае, если в строках представлена одинаковая последовательность символов одной величены.

Пример 14

 String str = "Я помню ЧУДНОЕ мгновенье"; String str2 = "я помню чудное мгновенье"; //строки не идентичны System.out.println(str.equals(str2)); //false //строки идентичны после перевода первой строки //в нижний регистр System.out.println(str.toLowerCase().equals(str2)); // true

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

int compareTo(String anotherString) — так же проверяет идентичность строк, однако, в отличии от метода equals возвращает:

  • нулевое значение, если строки равны,
  • целое отрицательное число, если первая строка предшествует второй
  • целое положительное число, если первая строка следует за второй
  • Данный метод предназначен для упорядочивания строк. Он позволяет сравнить строки между собой и определить предшествующую строку.
  • Для того, чтобы реализовать такое сравнение метод сравнивает числовые значения букв.
  • Рассмотрим пример с именами «Маша» и «Миша». При сравнении этих двух имен (пример 15), метод compareTo укажет, что имя «Маша» предшествует имени «Миша» (выдав отрицательное число) или наоборот, «Миша» следует за «Маша» (выдав положительное число).
  • При упорядочивании имен по алфавиту мы бы упорядочили эти имена именно так. Метод в данном случае определяет, что числовое значение буквы «а» в «Маша» меньше, чем числовое значение «и» в Миша.

Пример 15

 String name1 = "Маша"; String name2 = "Миша"; System.out.println(name1.compareTo(name2)); //-8 System.out.println(name2.compareTo(name1)); //8

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

  • Однако, в случае, если мы напишем «маша» с маленькой буквы и попробуем сравнить с «Миша», то получим положительное число.
 System.out.println("маша".compareTo("Миша")); //32

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

  • То есть в данном случае имя «Миша» предшествует имени «маша». Это происходит потому, что в таблице символов Юникода буквы верхнего регистра предшествуют нижнему.
  • Для сравнения строк без учета регистра символов используется функция int compareToIgnoreCase(String str)
 System.out.println("маша".compareToIgnoreCase("Миша")); //-8

нажмите кнопку ниже, чтобы скопировать код. — от — java tutorials — команда
Copy Code

Как мы видим, при сравнивании «маша» с «Миша» мы снова получаем отрицательное значение, то есть «маша» предшествует имени «Миша». На этом закончим знакомство с методами класса String. Это далеко не все методы. Все методы класса String и их описание можно найти в официальной документации

Related Searches to РАБОТА СО СТРОКАМИ В JAVA. ОСНОВНЫЕ МЕТОДЫ КЛАССА STRING

строковые функции в Java с примерами пример строки java синтаксис java string . класс stringbuffer в java строковые методы в java java string . args объявление строкового массива в java методы string в java с примерами строка java 8 java char java stringbuilder строка массива java

    INTERVIEW TIPS
  • Final Year Projects
  • HR Interview Q&A
  • GD Interview
  • Resume Samples
  • Engineering
  • Aptitude
  • Reasoning
  • Company Questions
  • Country wise visa
  • Interview Dress Code CAREER GUIDANCE
  • Entrance Exam
  • Colleges
  • Admission Alerts
  • ScholarShip
  • Education Loans
  • Letters
  • Learn Languages

Работа со строками

We use cookies. Read the Privacy and Cookie Policy I accept

Очень большое место в обработке информации занимает работа с текстами. Как и многое другое, текстовые строки в языке Java являются объектами. Они представляются экземплярами класса String или класса StringBuilder. В многопоточной среде вместо класса StringBuilder, не обеспечивающего синхронизацию, следует использовать класс stringBuffer, но эти вопросы мы отложим до главы 23.

Класс StringBuilder введен в стандартную библиотеку Java, начиная с версии Java SE 5, для ускорения работы с текстом в одном подпроцессе.

Все эти классы реализуют интерфейс charSequence, в котором описаны общие методы работы со строками любого типа. Таких методов немного:

? length () — возвращает количество символов в строке;

? charAt (int pos) — возвращает символ, стоящий в позиции pos строки. Символы в

строке нумеруются, начиная с нуля;

? subSequence (int start, int end) — возвращает подстроку, начинающуюся с позиции

start и заканчивающуюся перед позицией end исходной строки.

Поначалу представление строк объектами необычно и кажется слишком громоздким, но, привыкнув, вы оцените удобство работы с классами, а не с массивами символов.

Конечно, можно занести текст в массив символов типа char или даже в массив байтов типа byte, но тогда вы не сможете использовать готовые методы работы с текстовыми строками.

Зачем в язык введены три класса для хранения строк? В объектах класса String хранятся строки-константы неизменной длины и содержания, так сказать, отлитые в бронзе. Это значительно ускоряет обработку строк и позволяет экономить память. Компилятор создает только один экземпляр строки класса String и направляет все ссылки на него. Длину строк, хранящихся в объектах классов StringBuilder и StringBuffer, можно менять, вставляя и добавляя строки и символы, удаляя подстроки или сцепляя несколько строк в одну. Во многих случаях, когда надо изменить длину строки типа String, компилятор Java неявно преобразует ее к типу StringBuilder или StringBuffer, меняет длину, потом преобразует обратно в тип String. Например, следующее действие:

String s = «Это» + » одна » + «строка»;

компилятор выполнит примерно так:

String s = new StringBuffern.appendC^To’^.appendC одна «)

Будет создан объект класса StringBuffer или класса StringBuilder, в него методом append ( ) последовательно будут добавлены строки «Это», » одна «, «строка», и получившийся объект класса StringBuffer или StringBuilder будет приведен к типу String методом toString ( ).

Напомним, что символы в строках хранятся в кодировке Unicode, в которой каждый символ занимает два байта. Тип каждого символа — char.

Класс String

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

Как создать строку

Самый простой способ создать строку — это организовать ссылку типа String на строку-константу:

String s1 = «Это строка.»;

Если константа длинная, можно записать ее в нескольких строках текстового редактора, связывая их операцией сцепления:

String s2 = «Это длинная строка типа String, » +

«записанная в двух строках исходного текста»;

Замечание

Не забывайте о разнице между пустой строкой String s = «», не содержащей ни одного символа, и пустой ссылкой String s = null, не указывающей ни на какую строку и не являющейся объектом.

Самый правильный способ создать объект с точки зрения ООП — это вызвать его конструктор в операции new. Класс String предоставляет вам более десяти конструкторов:

? String () — создается объект с пустой строкой;

? String (String str) — конструктор копирования: из одного объекта создается его точная копия, поэтому данный конструктор используется редко;

? String (StringBuffer str) -преобразованная копия объекта класса StringBuffer;

? String(StringBuilder str) — преобразованная копия объекта класса StringBuilder;

? String(byte[] byteArray) — объект создается из массива байтов byteArray;

? String (char [ ] charArray) — объект создается из массива charArray символов Unicode;

? String(byte[ ] byteArray, int offset, int count) — объект создается из части массива байтов byteArray, начинающейся с индекса offset и содержащей count байтов;

? String (char [ ] charArray, int offset, int count) — то же, но массив состоит из символов Unicode;

? String (int [ ] intArray, int offset, int count) -то же, но массив состоит из символов

Unicode, записанных в массив целого типа, что позволяет использовать символы Unicode, занимающие больше двух байтов;

? String(byte [ ] byteArray, String encoding) — символы, записанные в массиве байтов, задаются в Unicode-строке с учетом кодировки encoding;

? String(byte[] byteArray, int offset, int count, String encoding) — то же самое, но только для части массива;

? String(byte [ ] byteArray, Charset charset) — символы, записанные в массиве байтов, задаются в Unicode-строке с учетом кодировки, заданной объектом charset;

? String(byte[] byteArray, int offset, int count, Charset charset) — то же самое, но только для части массива.

При неправильном задании индексов offset, count или кодировки encoding возникает исключительная ситуация.

Конструкторы, использующие массив байтов byteArray, предназначены для создания Unicode-строки из массива байтовых ASCII-кодировок символов. Такая ситуация возникает при чтении ASCII-файлов, извлечении информации из базы данных или при передаче информации по сети.

В самом простом случае компилятор для получения двухбайтовых символов Unicode добавит к каждому байту старший нулевой байт. Получится диапазон ‘u0000’ — ‘u00FF’ кодировки Unicode, соответствующий кодам Latinl. Тексты, записанные кириллицей, будут выведены неправильно.

Если же на компьютере сделаны местные установки, как говорят на жаргоне «установлена локаль» (locale) (в MS Windows это выполняется утилитой Regional Options (Язык и стандарты) в окне Control Panel (Панель управления)), то компилятор, прочитав эти установки, создаст символы Unicode, соответствующие местной кодовой странице. В русифицированном варианте MS Windows это обычно кодовая страница CP1251.

Если исходный массив с кириллическим ASCII-текстом был в кодировке CP1251, то строка Java будет создана правильно. Кириллица попадет в свой диапазон ‘u0400’— ‘u04FF’ кодировки Unicode.

Но у кириллицы есть еще по меньшей мере четыре кодировки:

? в MS-DOS применяется кодировка CP866;

? в UNIX обычно применяется кодировка KOI8-R;

? на компьютерах Apple Macintosh используется кодировка MacCyrillic;

? есть еще и международная кодировка кириллицы ISO8859-5.

Например, байт 11100011 (0xE3 — в шестнадцатеричной форме) в кодировке CP1251 представляет кириллическую букву г, в кодировке CP866 — букву у, в кодировке KOI8-R — букву ц, в ISO8859-5 — букву у, в MacCyrillic — букву г.

Если исходный кириллический ASCII-текст был в одной из этих кодировок, а местная кодировка — CP1251, то Unicode-символы строки Java не будут соответствовать кириллице.

В этих случаях применяются последние четыре конструктора, в которых параметром encoding или charset указывается, какую кодовую таблицу использовать конструктору при создании строки.

Листинг 5.1 показывает различные случаи записи кириллического текста. В нем создаются три массива байтов, содержащих слово «Россия» в трех кодировках:

? массив byteCp1251 содержит слово «Россия» в кодировке CP1251;

? массив byteCp866 содержит слово «Россия» в кодировке CP866;

? массив byteKOI8R содержит слово «Россия» в кодировке KOI8-R.

Из каждого массива создаются по три строки с использованием трех кодовых таблиц.

Кроме того, из массива символов c[] создается строка s1, из массива байтов, записанного в кодировке CP866, создается строка s2. Наконец, создается ссылка s3 на строку-константу.

Листинг 5.1. Создание кириллических строк

null, winLikeUNIX = null null, dosLikeUNIX = null null, unixLikeUNIX = null

(byte)0xD0, (byte)0xEE, (byte)0xF1, (byte)0xF1, (byte)0xE8, (byte)0xFF

(byte)0x90, (byte)0xAE, (byte)0xE1, (byte)0xE1, (byte)0xA8, (byte)0xEF

(byte)0xF2, (byte)0xCF, (byte)0xD3, (byte)0xD3, (byte)0xC9, (byte)0xD1

String s1 = new String(c);

String s2 = new String(byteCp866); // Для консоли MS Windows

String s3 = «Россия»;

// Сообщение в Cp866 для вывода на консоль MS Windows msg = new String(» «Россия» в «.getBytes(«Cp866») , «Cp1251»); winLikeWin = new String(byteCp1251, «Cp1251»); // Правильно winLikeDOS = new String(byteCp1251, «Cp866»); winLikeUNIX = new String(byteCp1251, «KOI8-R»); dosLikeWin = new String(byteCp866, «Cp1251»); // Для консоли dosLikeDOS = new String(byteCp866, «Cp866»); // Правильно dosLikeUNIX = new String(byteCp866, «KOI8-R») ; unixLikeWin = new String(byteKOI8R, «Cp1251»); unixLikeDOS = new String(byteKOI8R, «Cp866»); unixLikeUNIX = new String(byteKOI8R, «KOI8-R») ; // Правильно

«char array : II + s1); «default encoding: II + s2); «string constant : II + s3); «Cp1251 -> Cp1251 II + winLikeWin); «Cp1251 -> Cp866 : II + winLikeDOS); «Cp1251 -> KOI8-R II + winLikeUNIX); «Cp866 -> Cp1251 II + dosLikeWin); «Cp866 -> Cp866 : II + dosLikeDOS); «Cp866 -> KOI8-R II + dosLikeUNIX); «KOI8-R -> Cp1251 II + unixLikeWin); «KOI8-R -> Cp866 : II + unixLikeDOS); «KOI8-R -> KOI8-R II + unixLikeUNIX)

Все эти данные выводятся на консоль MS Windows 2000, как показано на рис. 5.1.

Рис. 5.1. Вывод кириллической строки на консоль MS Windows 2000

В первые три строки консоли без преобразования в Unicode выводятся массивы байтов

byteCp1251, byteCp866 и byteKOI8R. Это выполняется методом write() класса FilterOutputStream из пакета java.io.

В следующие три строки консоли выведены строки Java, полученные из массива символов c[], массива byteCp866 и строки-константы.

Далее строки консоли содержат преобразованные массивы.

Вы видите, что на консоль правильно выводится только массив в кодировке CP866, записанный в строку с использованием кодовой таблицы CP1251. В чем дело? Здесь свой вклад в проблему русификации вносит вывод потока символов на консоль или в файл.

Как уже упоминалось в главе 1, в консольное окно Command Prompt операционных систем MS Windows текст выводится в кодировке CP866.

Для того чтобы учесть это, слова «»Россия» в» преобразованы в массив байтов, содержащий символы в кодировке CP866, а затем переведены в строку msg.

В предпоследней строке рис. 5.1 сделано перенаправление вывода программы в файл codes.txt. В MS Windows вывод текста в файл происходит в кодировке CP1251. На рис. 5.2 показано содержимое файла codes.txt в окне программы Notepad (Блокнот).

Рис. 5.2. Вывод кириллической строки в файл

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

Вопросы русификации мы еще будем обсуждать в главах 9 и 24, а пока заметьте, что при создании строки из массива байтов лучше указывать ту же самую кириллическую кодировку, в которой записан массив. Тогда вы получите строку Java с правильными символами Unicode.

При выводе же строки на консоль, в окно, в файл или при передаче по сети лучше преобразовать строку Java с символами Unicode по правилам вывода в нужное место.

Еще один способ создать строку — это использовать два статических метода:

copyValueOf(char[] charArray, int offset, int length);

Они формируют строку по заданному массиву символов и возвращают ее в качестве результата своей работы. Например, после выполнения следующего фрагмента программы

String s1 = String.copyValueOf(c);

String s2 = String.copyValueOf(c, 3, 7);

получим в объекте s1 строку «Символьный», а в объекте s2-строку «вольный».

Упражнение

1. Потренируйтесь в преобразованиях строки в массивы байтов с разной кириллической кодировкой.

Сцепление строк

Со строками можно производить операцию сцепления строк (concatenation), обозначаемую знаком плюс (+). Эта операция создает новую строку, просто составленную из состыкованных первой и второй строк, как показано в начале данной главы. Ее можно применять и к константам, и к переменным. Например:

String attention = «Внимание: «;

String s = attention + «неизвестный символ»;

Вторая операция — присваивание += — применяется к переменным в левой части:

Поскольку операция + перегружена со сложения чисел на сцепление строк, встает вопрос о приоритете этих операций. У сцепления строк приоритет выше, чем у сложения, поэтому записав «2» + 2 + 2, получим строку «222». Но записав 2 + 2 + «2», получим строку «42», поскольку действия выполняются слева направо. Если же запишем «2» + (2 + 2), то получим «24».

Кроме операции сцепления соединить строки можно методом concat (), например:

String s = attention.concat(«иеизвестиый символ»);

Как узнать длину строки

Для того чтобы узнать длину строки, т. е. количество символов в ней, надо обратиться к методу length ( ):

String s = «Write once, run anywhere.»; int len = s.length();

int len = «Write once, run anywhere.».length();

поскольку строка-константа — полноценный объект класса String.

Заметьте, что строка — это не массив, у нее нет поля length.

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

Логический метод isEmpty(), появившийся в Java SE 6, возвращает true, если строка пуста, в ней нет ни одного символа.

Как выбрать символы из строки

Выбрать символ с индексом ind (индекс первого символа равен нулю) можно методом charAt(int ind). Если индекс ind отрицателен или не меньше, чем длина строки, возникает исключительная ситуация. Например, после определения

char ch = s.charAt(3);

переменная ch будет иметь значение ‘t’ .

Все символы строки в виде массива символов можно получить методом toCharArray( ).

Если же надо включить в массив символов dst, начиная с индекса ind массива, подстроку от индекса begin включительно до индекса end исключительно, то используйте метод

getChars(int begin, int end, char[] dst, int ind) типа void. В массив будет записано end — begin символов, которые займут элементы массива, начиная с индекса ind до индекса ind + (end — begin) — 1.

Этот метод создает исключительную ситуацию в следующих случаях:

? ссылка dst == null;

? индекс begin отрицателен;

? индекс begin больше индекса end;

? индекс end больше длины строки;

? индекс ind отрицателен;

? ind + (end — begin) больше dst.length.

Например, после выполнения

«Пароль легко иайти».getChars(2, 8, ch, 2);

результат будет таков:

Если надо получить массив байтов, содержащий все символы строки в байтовой кодировке ASCII, то используйте метод getBytes (). Этот метод при переводе символов из Unicode в ASCII использует локальную кодовую таблицу.

Если же надо получить массив байтов не в локальной кодировке, а в какой-то другой, применяйте метод getBytes (String encoding) или метод getBytes (Charset encoding).

Так сделано в листинге 5.1 при создании объекта msg. Строка «»Россия в»» перекодировалась в массив СР866-байтов для правильного вывода кириллицы в консольное окно Command Prompt операционных систем MS Windows.

Как выбрать подстроку

Метод substring (int begin, int end) выделяет подстроку от символа с индексом begin включительно до символа с индексом end исключительно. Длина подстроки будет равна end — begin. Индекс можно задать любым целым типом, кроме типа long.

Метод substring ( int begin) выделяет подстроку от индекса begin включительно до конца строки.

Если индексы отрицательны, индекс end больше длины строки или begin больше, чем end, то возникает исключительная ситуация.

Например, после выполнения следующего фрагмента

String s = «Write once, run anywhere.»;

String sub1 = s.substring(6, 10);

String sub2 = s.substring(16);

получим в строке sub1 значение «once», а в sub2-значение «anywhere.».

Как разбить строку на подстроки

Метод split (String regExp) разбивает строку на подстроки, используя в качестве разделителей символы, входящие в параметр regExp, записывает подстроки в массив строк и возвращает ссылку на этот массив. Сами разделители не входят ни в одну подстроку.

Например, после выполнения следующего фрагмента

String s = «Write:once,:run:anywhere.»;

String[] sub = s.split(«:»);

получим в строке sub[0] значение «Write», в строке sub[1] значение «once,», в строке sub[2] значение «run», а в sub[3] — значение «anywhere.».

Метод split(String regExp, int n) разбивает строку на n подстрок. Если параметр n меньше числа подстрок, то весь остаток строки заносится в последний элемент создаваемого массива строк. Применение метода

String[] sub = s.split(«:», 2);

в предыдущем примере даст массив sub из двух элементов со значением sub[0], равным

«Write», и значением sub[1], равным «once, :run:anywhere.».

Разбить строку можно практически на любые подстроки, поскольку значением параметра regExp может быть любое регулярное выражение. Регулярное выражение (regular expression) — это шаблон для отбора строк, составляемый по сложным правилам, изложению которых посвящены целые книги. Регулярные выражения выходят за рамки нашей книги, но все-таки я приведу пример разбиения строки на слова, разделенные пробельными символами:

String[] word = s.split(«s+»);

Как сравнить строки

Операция сравнения == сопоставляет только ссылки на строки. Она выясняет, указывают ли ссылки на одну и ту же строку. Например, для строк

String si = «Какая-то строка»;

String s2 = «Другая строка»;

сравнение s1 == s2 дает в результате false.

Значение true получится, только если обе ссылки указывают на одну и ту же строку, например после присваивания s1 = s2.

Интересно, что если мы определим s3 так:

String s3 = «Какая-то строка»;

то сравнение s1 == s3 даст в результате true, потому что компилятор устроен так, что он создаст только один экземпляр константы «Какая-то строка» и направит на него все ссылки — и ссылку s1, и ссылку s3. Это не приводит к недоразумениям, поскольку строка типа String неизменяема.

Вы, разумеется, хотите сравнивать не ссылки, а содержимое строк. Для этого есть несколько методов.

Логический метод equals(Object obj), переопределенный из класса Object, возвращает true, если параметр obj не равен null, является объектом класса String, и строка, содержащаяся в нем, полностью идентична данной строке вплоть до совпадения регистра букв. В остальных случаях возвращается значение false.

Логический метод equalsIgnoreCase(Object obj) работает так же, но одинаковые буквы, записанные в разных регистрах, считаются совпадающими.

Например, s2.equals(«другая строка») даст в результате false, а s2.equalsIgnoreCase( «другая строка» ) возвратит true.

Метод compareTo (String str) возвращает целое число типа int, вычисленное по следующим правилам:

1. Сравниваются символы данной строки this и строки str с одинаковым индексом, пока не встретятся различные символы с индексом, допустим, k или пока одна из строк не закончится.

2. В первом случае возвращается значение this.charAt(k) — str.charAt(k), т. е. разность кодировок Unicode первых несовпадающих символов.

3. Во втором случае возвращается значение this.length() — str.length(), т. е. разность длин строк.

4. Если строки совпадают, возвращается 0.

Если значение str равно null, возникает исключительная ситуация.

Нуль возвращается в той же ситуации, в которой метод equals () возвращает true.

Метод compareToIgnoreCase (String str) производит сравнение без учета регистра букв, точнее говоря, выполняется метод

Эти методы не учитывают алфавитное расположение символов в локальной кодировке.

Русские буквы расположены в Unicode по алфавиту, за исключением одной буквы. Заглавная буква Ё находится перед всеми кириллическими буквами, ее код ‘u0401’, а строчная буква ё — после всех русских букв, ее код ‘u0451’.

Если вас такое расположение не устраивает, задайте свое размещение букв с помощью класса RuleBasedCollator из пакета java.text.

Сравнить подстроку данной строки this с подстрокой той же длины len другой строки str можно логическим методом

regionMatches(int ind1, String str, int ind2, int len);

Здесь ind1 — индекс начала подстроки данной строки this, ind2 — индекс начала подстроки другой строки str. Результат false получается в следующих случаях:

? хотя бы один из индексов ind1 или ind2 отрицателен;

? хотя бы одно из ind1 + len или ind2 + len больше длины соответствующей строки;

? хотя бы одна пара символов не совпадает.

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

regionMatches(boolean flag, int ind1, String str, int ind2, int len);

Если первый параметр flag равен true, то регистр букв при сравнении подстрок не учитывается, если false — учитывается.

Как найти символ в строке

Поиск всегда ведется с учетом регистра букв.

Первое появление символа ch в данной строке this можно отследить методом indexOf(int ch), возвращающим индекс этого символа в строке или -1, если символа ch в строке this нет.

Например, «Молоко».^ехО^ ‘о’) выдаст в результате индекс 1.

Конечно, этот метод реализован так, что он выполняет в цикле последовательные сравнения this. charAt (k++) == ch, пока не получит значение true.

Второе и следующие появления символа ch в данной строке this можно отследить методом indexOf(int ch, int ind). Этот метод начинает поиск символа ch с индекса ind. Если ind < 0, то поиск идет с начала строки, если ind больше длины строки, то символ не ищется, т. е. возвращается -1.

Например, «Молоко».^ех0^’о’, indexOf (‘о’) + 1) даст в результате индекс 3.

Последнее появление символа ch в данной строке this отслеживает метод lastIndexOf(int ch). Он просматривает строку в обратном порядке. Если символ ch не найден, возвращается -1.

Например, «Молоко».lastIndexOf( ‘о’) даст в результате индекс 5.

Предпоследнее и предыдущие появления символа ch в данной строке this можно отследить методом lastIndexOf(int ch, int ind), который просматривает строку в обратном порядке, начиная с индекса ind. Если ind больше длины строки, то поиск идет от конца строки; если ind < 0, то возвращается -1.

Как найти подстроку

Поиск всегда ведется с учетом регистра букв.

Первое вхождение подстроки sub в данную строку this отыскивает метод indexOf(String sub). Он возвращает индекс первого символа первого вхождения подстроки sub в строку или -1, если подстрока sub не входит в строку this. Например, «Раскраска» . indexOf («рас») даст в результате 4.

Если вы хотите начать поиск не с начала строки, а с какого-то индекса ind, используйте метод indexOf (String sub, int ind). Если ind < 0, то поиск идет с начала строки; если ind больше длины строки, то символ не ищется, т. е. возвращается -1.

Последнее вхождение подстроки sub в данную строку this можно отыскать методом lastIndexOf(String sub), возвращающим индекс первого символа последнего вхождения подстроки sub в строку this или -1, если подстрока sub не входит в строку this.

Последнее вхождение подстроки sub не во всю строку this, а только в ее начало до индекса ind можно отыскать методом lastIndexOf(String str, int ind). Если ind больше длины строки, то поиск идет от конца строки; если ind < 0, то возвращается -1.

Для того чтобы проверить, не начинается ли данная строка this с подстроки sub, используйте логический метод startsWith(String sub), возвращающий true, если данная строка this начинается с подстроки sub или совпадает с ней, или подстрока sub пуста.

Можно проверить и появление подстроки sub в данной строке this, начиная с некоторого индекса ind логическим методом startsWith(String sub, int ind). Если индекс ind отрицателен или больше длины строки, возвращается false.

Для того чтобы проверить, не заканчивается ли данная строка this подстрокой sub, используйте логический метод endsWith(String sub). Учтите, что он возвращает true, если подстрока sub совпадает со всей строкой или подстрока sub пуста.

Например, if (fileName.endsWith(«.java») ) отследит имена файлов с исходными текстами Java.

Перечисленные ранее методы создают исключительную ситуацию, если sub == null.

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

Как изменить регистр букв

Метод toLowerCase () возвращает новую строку, в которой все буквы переведены в нижний регистр, т. е. сделаны строчными.

Метод toUpperCase () возвращает новую строку, в которой все буквы переведены в верхний регистр, т. е. сделаны прописными.

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

toLowerCase(Locale loc); toUpperCase(Locale loc);

Как заменить отдельный символ

Метод replace (char old, char new) возвращает новую строку, в которой все вхождения символа old заменены символом new. Если символа old в строке нет, то возвращается ссылка на исходную строку.

Например, после выполнения «Рука в руку сует хлеб».гер1асе(‘у’, ‘е’) получим новую строку «Река в реке сеет хлеб».

Регистр букв при замене учитывается.

Как заменить подстроку

Метод replace (String old, String new) возвращает новую строку, в которой все вхождения подстроки old заменены строкой new. Если подстроки old в исходной строке нет, то возвращается ссылка на исходную строку.

Метод replaceAll (String oldRegEx, String new) возвращает новую строку, в которой все вхождения подстроки oldRegEx заменены строкой new. Если подстроки old в исходной строке нет, то возвращается ссылка на исходную строку. В отличие от предыдущего метода аргументом oldRegEx может служить регулярное выражение, пользуясь которым можно сделать очень сложную замену.

Метод replaceFirst (String oldRegEx, String new) возвращает новую строку, в которой сделана только одна, первая, замена.

Регистр букв при замене учитывается.

Как убрать пробелы в начале и конце строки

Метод trim () возвращает новую строку, в которой удалены начальные и конечные символы с кодами, не превышающими ‘u0020’.

Как преобразовать в строку данные другого типа

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

Класс String содержит восемь статических методов valueOf(type elem) преобразования в строку примитивных типов boolean, char, int, long, float, double, массива char [] и просто объекта типа Obj ect.

Девятый метод valueOf(char[] ch, int offset, int len) преобразует в строку подмассив массива ch, начинающийся с индекса offset и имеющий len элементов.

Кроме того, в каждом классе есть метод toString(), переопределенный или просто унаследованный от класса Obj ect. Он преобразует объекты класса в строку. Фактически метод valueOf () вызывает метод toString() соответствующего класса. Поэтому результат преобразования зависит от того, как реализован метод toString ().

Еще один простой способ — сцепить значение elem какого-либо типа с пустой строкой: «» + elem. При этом неявно вызывается метод elem.toString( ).

Упражнения

2. Подсчитайте количество появлений того или иного символа в заданной строке.

3. Подсчитайте количество слов в заданной строке.

4. Найдите число появлений заданного слова в заданной строке.

Как преобразовать двумерный массив char в стринг? C#

Нужно сделать проверку строки на цифры, но возникает проблема преобразования «не удается преобразовать из «char» в «string» «.
Проверка строк:
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
if (char.Parse(myArr[i,j]) < "48" || char.Parse(myArr[i,j]) >«58») //48-58 это ASCII-коды цифр
myArr2[z, d] = myArr[x,y];
>
>
>
Попытался сделать переприсвание, но тоже ошибка, что делать?

Голосование за лучший ответ

>if (char.Parse(myArr[i,j]) < "48" || char.Parse(myArr[i,j]) >«58») //48-58 это ASCII-коды цифр
Конкретно в этой строке никакие это не коды а две строки с СИМВОЛАМИ «48» и «58». Каким образом вы пытаетесь натянуть операции сравнения < и >на строковую константу?

NooB YOUЗнаток (425) 3 года назад
Без ковычек
NooB YOUЗнаток (425) 3 года назад
Вопрос состоит в том, как сделать проверку строки в двумерном массиве типа char на цифры.
TemaМыслитель (5006) 3 года назад

А без кавычек разве не работает? По идее должно автоприведение сработать
if (char.Parse(myArr[i,j]) < 48 || char.Parse(myArr[i,j]) >58)

NooB YOU Знаток (425) Tema, пишет ошибку: Program.cs(58, 36): [CS1503] Аргумент 1: не удается преобразовать из «char» в «string».

TemaМыслитель (5006) 3 года назад

А ну да, тут я недоглядел еще. Зачем парсить в символ то что уже и так символом является. Т. е. как насчет такого?
if (myArr[i,j] < 48 || myArr[i,j] >58)

NooB YOU Знаток (425) Tema, при вызове теперь ругается, что Индекс находился вне границ массива.
NooB YOUЗнаток (425) 3 года назад

DeleteNoNumbers(myArr, myArr2,x, y, z, d);
public static void DeleteNoNumbers(char[,] myArr, char[,] myArr2,int x, int y, int z, int d)
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
if (myArr[i,j] < 48 || myArr[i,j] >58) //48-58 это ASCII-коды цифр
myArr2[z, d] = myArr[x,y];
>
>
>

myArr[x, y] = myArr2[z, d];
>

TemaМыслитель (5006) 3 года назад

А это уже другая ошибка. Тут надо смотреть за индексами.
На каких значениях i и j вываливает ошибку и какие размеры в этот момент фактически имеет myArr?

NooB YOU Знаток (425) Tema, 5 строк и 5 столбцов.
TemaМыслитель (5006) 3 года назад

Блин только сейчас заметил
myArr2[z, d] = myArr[x,y];
Вы цикл то правильно организовали по i < x и j < y но в этой строке пытаетесь у массива взять myArr[x,y] - а это выход за пределы массива

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *