при использовании массива строк в java преобразуйте его в нижний регистр

У меня есть одномерный массив строк в java, в котором я хочу изменить все строки на строчные, чтобы потом сравнить их с исходным массивом, чтобы я мог проверить программу, нет ли в моих строках/массиве символов верхнего регистра.

Я пробовал использовать x.toLowercase, но это работает только с отдельными строками. Есть ли способ преобразовать всю строку в нижний регистр?

С уважением, Бренд


person Rdhao    schedule 07.12.2011    source источник
comment
Java, а не JavaScript, верно? Возможно, вы захотите перепроверить свои теги.   -  person buruzaemon    schedule 07.12.2011
comment
что вы подразумеваете под работой с отдельными строками и преобразованием всей строки в нижний регистр.   -  person Sai Kalyan Kumar Akshinthala    schedule 07.12.2011
comment
Да, есть способ сделать это — он называется циклом.   -  person Hot Licks    schedule 07.12.2011
comment
Вы должны перебрать все строки в массиве и преобразовать каждую строку в нижний регистр. Я думаю, что для этого нет отдельного метода.   -  person Alex K.    schedule 07.12.2011
comment
дерьмо, ты прав насчет тегов, мой плохой, извини за это.   -  person Rdhao    schedule 07.12.2011


Ответы (9)


Если вам нужен короткий пример, вы можете сделать следующее

String[] array = ...
String asString = Arrays.toString(array);
if(asString.equals(asString.toLowerCase())
   // no upper case characters.
person Peter Lawrey    schedule 07.12.2011

arraylist.stream().map(s -> s.toLowerCase()).collect(Collectors.toList()) 

может помочь вам

person Федор Дао    schedule 02.03.2017

Всего две строки

     String[] array = {"One", "Two"};
    for(int i=0;i<array.length;i++){
        if(!array[i].equals(array[i].toLowerCase()))
            System.out.println("It contains uppercase char");
        array[i] = array[i].toLowerCase();
    }
    for(int i=0;i<array.length;i++)
        System.out.println(array[i]);

ВЫХОД:

It contains uppercase char
It contains uppercase char
one
two
person dku.rajkumar    schedule 07.12.2011
comment
Это не проверяет, содержит ли какая-либо из исходных строк символы верхнего регистра. - person Peter Lawrey; 07.12.2011
comment
@dku.rajkumar: да, теперь это так, но Rdhao хочет сравнить версию в верхнем регистре с исходной, поэтому простая замена не имеет смысла. - person Michael Borgwardt; 07.12.2011
comment
@Майкл, надеюсь, теперь это так :) - person dku.rajkumar; 07.12.2011
comment
немного запоздалый комментарий, но это мне очень помогло, спасибо - person Krusty the Clown; 29.03.2018

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

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

На самом деле это было бы более эффективно, поскольку:

  • вы можете сократить дальнейшую оценку, если обнаружите элемент, который содержит символы в верхнем регистре. (Представьте себе случай, когда первый элемент массива из миллиона строк имеет верхний регистр; вы только что сэкономили на миллионе вызовов строчных букв()).
  • Вам не нужно выделять память для всего дополнительного массива, который вы не будете использовать за пределами сравнения.
  • Даже в лучшем случае предлагаемый вами сценарий будет включать одну итерацию по массиву для получения версий в нижнем регистре, а затем еще одну итерацию по массиву для реализации равенства. Выполнение обоих за одну итерацию, вероятно, будет более эффективным даже без возможности короткого замыкания.
person Andrzej Doyle    schedule 07.12.2011

Ранее мы использовали (в Java ‹ 8)

String[] x = {"APPLe", "BaLL", "CaT"};
for (int i = 0; i < x.length; i++) {
    x[i] = x[i].toLowerCase();
}

Теперь в Java8:

x= Arrays.asList(x).stream().map(String::toLowerCase).toArray(String[]::new);
person Hari Chebrolu    schedule 15.03.2017
comment
Не рекомендуется использовать потоки для этого небольшого набора статических массивов. Достаточно простого цикла. (То, что вы делаете, это преобразование массива в список, затем его потоковую передачу, а затем преобразование обратно в массив. Операция ~ 3N, в то время как один простой цикл уменьшает ее до операции ~ 1N). - person KarelG; 15.03.2017

Необходимы два шага:

  1. Перебрать массив строк
  2. Преобразуйте каждый в нижний регистр.
person duffymo    schedule 07.12.2011
comment
Это усложнит задачу to afterwards compare it to the original array. ;) - person Peter Lawrey; 07.12.2011

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

public class Test {

public static void main(String[] args) {
    String s[]={"firsT ","seCond ","THird "};
    String str = " ";
      for (int i = 0; i < s.length; i++) {
      str = str + s[i];
      }

      System.out.println(str.toLowerCase());

}
}
person Noufal Panolan    schedule 07.12.2011

Следующий код может помочь вам

package stringtoupercasearray;

import java.util.Scanner;

/**
 *
 * @author ROBI
 */
public class StringToUperCaseArray {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int size;
        String result = null;
        System.out.println("Please enter the size of the array: ");
        Scanner r=new Scanner(System.in);
        size=r.nextInt();
        String[] s=new String[size];
        System.out.println("Please enter the sritngs:");
        for(int i=0;i<s.length;i++){

        s[i]=r.next();

        }
        System.out.print("The given sritngs are:");
        for (String item : s) {
            //s[i]=r.nextLine();
            System.out.print(item+"\n");
        }

         System.out.println("After converting to uppercase the string is:");
        for (String item : s) {
            result = item.toUpperCase();
             System.out.println(result);
        }


    }

}
person Robi    schedule 10.06.2016

Вы можете сделать это с помощью одной строки кода. Просто скопируйте и вставьте следующий фрагмент без зацикливания.

String[] strArray = {"item1 Iteme1.1", "item2", "item3", "item4", "etc"}//This line is not part of the single line (=D).

String strArrayLowerCase[] = Arrays.toString(strArray).substring(1)
            .replace("]", "").toLowerCase().split(",");


Счастливая жизнь струн. =Д

person mifthi    schedule 26.08.2019