Перейти к контенту

Java String: работа со строками в Java

Работа со строками в Java очень проста(Используется класс class java.lang.String). Главное, на что следует обратить внимание, это то, что работа со строками с помощью оператора «+» не очень эффективна; она создает новые строковые объекты без необходимости.

Для большинства программ это не имеет значения; но если вы выполняете много операций со строками и скорость не на последнем месте, используйте StringBuffer (потокобезопасный) или StringBuilder (не потокобезопасный, но немного более эффективный).

 

Также имейте в виду, что Java не самый эффективный язык в мире для работы с большим количеством текстовых данных. Perl или Python обычно работают намного быстрее.

И, наконец, не забудьте использовать метод equals() для сравнения текста в строках, а не == (что сравнивает объекты, а не текст).

Объявление и инициализация строк в Java

Вы можете объявить и инициализировать строку в Java, используя класс String.

String text = "Hello";

System.out.println(text);

Hello

Присоединение, объединение или добавление строк в Java

Самый простой способ объединить строки в Java — это использовать +. Это работает так:

String text1 = "Hello";

String text2 = "Jim";

System.out.println(text1 + " " + text2);

Hello Jim

Однако это не очень эффективно, потому что каждый раз, когда вы пишете +, вы создаете новый объект String. По этой причине вы можете использовать StringBuilder или более старую поточно-ориентированную версию StringBuffer.

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" to");
sb.append(" you");
System.out.println(sb.toString());

Hello to you

Более того, поскольку append() возвращает ссылку на сам объект StringBuilder, мы можем написать что-то вроде этого с тем же эффектом:

StringBuilder sb = new StringBuilder();
sb.append("Hello")
.append(" to")
.append(" you");
System.out.println(sb.toString());

Подстрока Java: выбор частей строк

Чтобы получить часть строки, используйте метод substring.

String substring(int beginIndex, int endIndex)

EndIndex здесь не является обязательным; если его убрать, вы получите всю строку после beginIndex. Обратите внимание, что выбранная подстрока не включает символ в самом endIndex. Она включает в себя все символы до endIndex.

Длина выбранной подстроки равна endIndex — startIndex.

Вот несколько примеров.

String text = "The quick brown fox";
// Everything from index 4 onwards
System.out.println(text.substring(4));
// Index 0 up to but not including index 3.
System.out.println(text.substring(0, 3));

quick brown fox
The

Java Array String: объединение массивов строк

Удивительно, но в ядре Java нет способа объединения массивов строк, хотя такие методы существуют в различных библиотеках.

Вы всегда можете создать свои собственные. Следующий класс объявляет именно такой метод и использует его для соединения массива строк. Вы можете легко адаптировать это для работы с ArrayList или Vector или чем-то еще.

package caveofprogramming.aquarium;
package caveofprogramming.aquarium;

import java.util.*;

public class Test {
    public static String join(String[] strings, String glue) {
    
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i < strings.length; i++) {
            sb.append(strings[i]);
            
            if(i < strings.length - 1) {
                sb.append(glue);
            }
        }
        
        return sb.toString();
    }
    
    public static void main(String [] args) {

        String texts[] = {"Hello", "to", "you"};
        System.out.println(join(texts, " "));
    }
}

Hello to you

Java String Split: разделение строк

Вы можете разбить строку на массив токенов, используя метод split (REGEX).

Давайте посмотрим на некоторые примеры.

Чтобы разделить пробелом (это также работает для вкладок):

String text = "The quick brown fox";
String text = "The quick brown fox";
        
// Split on whitespace
String [] tokens = text.split("\s+");
        
for(int i=0; i < tokens.length; i++) {
    System.out.println(tokens[i]);
}

The
quick
brown
fox

Разделим электронный адрес на части

String text = "someone@nowhere.com";

// Split on @ and .
// The double backslashes make this regular
// expression look more confusing than it is.
// We are escaping once for the sake of the
// regex, and again for the sake of Java.
String [] tokens = text.split("[\@\.]+");

for(int i=0; i < tokens.length; i++) {
    System.out.println(tokens[i]);
}

someone
nowhere
com

Нахождение длины строки

java string length() возвращает общее количество символов в строке. Длина строки Java такая же, как в коде Unicode.

Пример:

public class LengthExample{  
public static void main(String args[]){  
String s1="javatpoint";  
String s2="python";  
System.out.println("string length is: "+s1.length());//10 is the length of javatpoint string  
System.out.println("string length is: "+s2.length());//6 is the length of python string  
}}  

string length is: 10
string length is: 6

Еще один способ:

public class LengthExample2 {  
    public static void main(String[] args) {  
        String str = "Javatpoint";  
        if(str.length()>0) {  
            System.out.println("String is not empty and length is: "+str.length());  
        }  
        str = "";  
        if(str.length()==0) {  
            System.out.println("String is empty now: "+str.length());  
        }  
    }  
}  

String is not empty and length is: 10
String is empty now: 0

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

Для сравнения строк в Java используйте equals(), а не ==.

== сообщит вам, если две ссылки ссылаются на один и тот же объект. Чтобы проверить, идентичны ли две строки, .equals делает то, что вы хотите.

Следующая программа иллюстрирует это:

// Here's some text.
String text1 = "Hello there";

// Here's the same text.
String text2 = "Hello there";

// Here's a second reference to the 
// first string.
String text3 = text1;

// The first two strings are equal
// (contain the same text)
if(text1.equals(text2)) {
    System.out.println("text1 matches text2.");
}

// ... and in this case they are the same object, 
// which presumably is due to optimization by the
// virtual machine. DO NOT rely on this!!
if(text1 == text2) {
    System.out.println("text1 and text2 are the same object (oddly)");
}

// text2 and text3 ARE clearly the same object, however.
if(text2 == text3) {
    System.out.println("text2 and text3 are the same object.");
}

text1 matches text2.
text1 and text2 are the same object (oddly)
text2 and text3 are the same object.

Чтобы проверить, является ли объект строкой или нет, используйте instanceof.

// Here's a string.
/ Here's a string.
String text1 = "Hello there";

if(text1 instanceof java.lang.String) {
    System.out.println("It's a string!");
}

It's a string!

Форматирование строк или преобразование чисел в строки

Если вы просто хотите преобразовать число в строку в Java, это очень просто с помощью toString (). Возможно, вам придется сначала использовать примитивный тип, например, int, для объекта типа Integer или Double.

// An int.
int count = 59;

// A float.
double cost = 57.59;

// Convert int to string and display.
System.out.println(new Integer(count).toString());

// Convert float to string and display.
System.out.println(new Double(cost).toString());

59
57.59

Если вы хотите больше контроля над форматированием ваших чисел, вам нужен метод static format ().

Этот метод работает так же, как sprintf в C или Perl. Вот пример, который форматирует различные числа:

// An int.
int count = 59;

// A float.
double cost = 57.59;

// Format the numbers together with some text.
// For 'cost', we make the entire number 7 characters
// wide (including the .); we left-pad with zeros
// and put two numbers after the decimal point.
String text = String.format("Count: %d, Cost: $%07.2f", 
    count, cost);

System.out.println(text);

Count: 59, Cost: $057.59

 

Оцени статью

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

 

Пока нет комментариев.

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

Ваш e-mail не будет опубликован.

СайдбарКомментарии (0)