В этой статье представлены 10 наиболее распространенных вопросов о String в Java:
1. Для сравнения строк следует использовать «==» или «equals()»?
Проще говоря, «==" определяет, относятся ли две ссылки к одному и тому же адресу памяти (одному и тому же физическому объекту).
И «равно» определяет, равны ли значения двух строк.
Если вы не хотите определить, являются ли две ссылки на строки одним и тем же объектом, вам всегда следует использовать методquals().
Вы лучше поймете эту проблему, если разберетесь в интернировании строк.
2. Почему для конфиденциальной информации лучше использовать char[], чем String?
String — это неизменяемый объект, а это означает, что после создания весь объект не может быть изменен. Даже если новичок думает, что ссылка на String изменилась, на самом деле это просто ссылка (указатель), указывающая на другой (новый) объект.
Программисты могут явно изменять массив символов, поэтому конфиденциальную информацию (например, пароли) нелегко раскрыть где-либо еще (пока вы устанавливаете для char[] значение 0 после использования).
3. Использовать строку в качестве условия случая в операторе переключения?
Начиная с JDK7 это возможно. Кстати, Java 6 и предыдущие версии этого не поддерживают.
Скопируйте код кода следующим образом:
// Действует только в Java 7 и выше!
переключатель (str.toLowerCase()) {
случай «а»:
значение = 1;
перерыв;
случай «б»:
значение = 2;
перерыв;
}
4. Преобразовать строку в число
Для очень больших чисел используйте Long, код следующий:
Скопируйте код кода следующим образом:
int age = Integer.parseInt("10");
long id = Long.parseLong("190"); // Если значение может быть большим.
5. Как разделить строку по пробельным символам
Строка, полученная методом Split() класса String, будет анализироваться как регулярное выражение.
"/s" представляет собой пустые символы, такие как пробел " ", табуляция "/t", перевод строки "/n", возврат каретки "/r".
Когда компилятор анализирует исходный код, он также выполняет буквальное перекодирование, поэтому необходимо использовать "//s".
Скопируйте код кода следующим образом:
String[] strArray = aString.split("//s+");
6. Как выполняется внутренняя обработка метода substring()?
В JDK6 метод substring() по-прежнему использует исходный массив char[] и создает «новую» строку с учетом смещения и длины.
Если вы хотите, чтобы функция substring() получила вновь созданный объект, используйте следующий метод:
Скопируйте код кода следующим образом:
String sub = str.substring(начало, конец) + "";
Конечно, в Java 7 функция substring() создает новый массив char[] вместо того, чтобы делиться им.
Чтобы узнать больше, обратитесь к: метод substring() и его различия в JDK6 и JDK7.
7. String против StringBuilder против StringBuffer
StringBuilder является изменчивым, поэтому внутренние значения можно изменять после создания.
StringBuffer синхронизирован и, следовательно, потокобезопасен, но относительно менее эффективен.
8. Как повторно соединить одну и ту же строку?
Вариант 1. Используйте служебный класс StringUtils библиотеки Apache Commons Lang.
Скопируйте код кода следующим образом:
Строка ул = "abcd";
Повторенная строка = StringUtils.repeat(str,3);//abcdabcdabcd
Вариант 2:
Используйте конструктор StringBuilder. Более гибкий.
Скопируйте код кода следующим образом:
Строка src = "имя";
int len = src.length();
интервал повторения = 5;
StringBuilder builder = новый StringBuilder (длина * повторение);
for(int i=0; i<repeat; i++){
builder.append(src);
}
Строка dst = builder.toString();
9. Как преобразовать строку в дату?
Скопируйте код кода следующим образом:
Формат SimpleDateFormat = новый SimpleDateFormat("гггг-ММ-дд");
Строка str = "2013-11-07";
Дата Дата = format.parse(str);
System.out.println(format.format(date));//2013-11-07
10. Как посчитать, сколько раз появляется тот или иной символ?
Также используется класс StringUtils библиотеки Apache Commons Lang:
Скопируйте код кода следующим образом:
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);