Создание новой строки с отсортированными буквами из строкового слова в Java - PullRequest
7 голосов
/ 07 июня 2011

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

Допустим, у меня есть что-то вроде этого

String theWord = "Hello World";

Как мне вычислить новую строку, чтобы сделать еевыглядит как "

dehllloorw

. Это слово, которое отсортировано по буквам в алфавитном порядке.

Заранее спасибо

Ответы [ 8 ]

28 голосов
/ 07 июня 2011
char[] chars = theWord.toCharArray();
Arrays.sort(chars);
String newWord = new String(chars);
10 голосов
/ 07 июня 2011
4 голосов
/ 07 июня 2011

Согласен, я украл решение. Но, по-видимому, также важно убрать пробелы и сделать все строчными:

char[] array = theWord.replaceAll("\\s+", "").toLowerCase().toCharArray();
Arrays.sort(array);
System.out.println(new String(array));
2 голосов
/ 07 июня 2011

Ни одно из вышеперечисленных решений не зависит от конкретной страны, поэтому я пришел с этим решением, оно неэффективно, но работает очень хорошо.

public static String localeSpecificStringSort(String str, Locale locale) {

        String[] strArr = new String[str.length()];

        for(int i=0;i<str.length();i++){
            strArr[i] =  str.substring(i,i+1);
        }
        Collator collator = Collator.getInstance(locale);
        Arrays.sort(strArr, collator);
        StringBuffer strBuf = new StringBuffer();
        for (String string : strArr) {
            strBuf.append(string);
        }
        return strBuf.toString();
    }
1 голос
/ 14 июня 2012
char[] arr = new char[theWord.length()];
for(int i=0;i<theWord.length;i++)
{
    arr[i]=theWord.charAt(i);
}
for(int i=0;i<theWord.length();i++)
  for(int j=0;j<theWord.length();j++)
{
    char temp = arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
}
int size=theWord.length();
theWord="";
for(int i=0;i<size;i++)
{
    theWord+=arr[i];
}
0 голосов
/ 15 октября 2018

Все решения были O (nlogn), поскольку они сортируют массив. Вместо этого мы можем взять массив [26] и сделать это в O (n). после того, как вы преобразуете его в нижний регистр и удалите пробелы, которые являются O (n), int [] ar = new int [26]; for (char c: s.toCharArray ()) ar [c-'a '] ++; и затем сформируйте требуемую строку O (n).

0 голосов
/ 31 октября 2016
char[]  chars2  = b.toLowerCase().toCharArray();
Arrays.sort(chars1);
String  Ns1   = new String(chars1);
0 голосов
/ 25 сентября 2016
import java.util.Arrays;
import java.util.Scanner;

// re arrange alphabets in order
public class RearrangeAlphabets {

    @SuppressWarnings("resource")
    public static void main(String[] args) {

        String theWord;
        Scanner in = new Scanner(System.in);

        System.out.println("Enter a string to rearrange: \n");

        theWord = in.nextLine();
        int length = theWord.length();
        System.out.println("Length of string: "+length);
        char[] chars=theWord.toCharArray();
        Arrays.sort(chars);
        String newWord=new String(chars);

        System.out.println("The Re-Arranged word : "+newWord);

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...