Java 词汇字符串排序查询

Java 词汇字符串排序查询,java,sorting,Java,Sorting,因此,我是Java初学者,在一本书中解决了以下问题: 编写一个程序,设置包含段落的字符串变量 您选择的文本。从课文中提取单词并进行排序 按字母顺序排列。显示已排序的单词列表。你可以 使用一种称为气泡排序的简单排序方法。对数组排序 按升序排列,过程如下:a。从 数组中的第一个元素,比较连续的元素(0和1,1 和2、2和3等)。B如果任何对的第一个元素是 大于第二个,交换两个元素。C重复 处理整个阵列,直到无需交换。这个 数组元素现在按升序排列 我的解决方案是: public class bubbl

因此,我是Java初学者,在一本书中解决了以下问题:

编写一个程序,设置包含段落的字符串变量 您选择的文本。从课文中提取单词并进行排序 按字母顺序排列。显示已排序的单词列表。你可以 使用一种称为气泡排序的简单排序方法。对数组排序 按升序排列,过程如下:a。从 数组中的第一个元素,比较连续的元素(0和1,1 和2、2和3等)。B如果任何对的第一个元素是 大于第二个,交换两个元素。C重复 处理整个阵列,直到无需交换。这个 数组元素现在按升序排列

我的解决方案是:

public class bubbleSort {

    public static void main(String[] args) {

        String Homer = "He was the son of Epikaste and Telemachus. " +
                "He was said to be a court singer ";

        String swap;
        Homer = Homer.replace(',', ' ');
        Homer = Homer.replace('.', ' ');
        Homer = Homer.replace("  ", " ");

        String[] words = Homer.split(" ");

        for(String val:words){
            System.out.println(val);
        }

        System.out.println(" ---- SORTED -------");

        boolean exchange = true;
        while (exchange) {
            exchange = false;
            for (int i = 0; i < (words.length - 1); ++i) {
                if (words[i].charAt(0) > words[i + 1].charAt(0)) {

                    swap = words[i];
                    words[i] = words[i + 1];
                    words[i + 1] = swap;
                    exchange = true;
                }
            }
        }

        for(String val:words){
            System.out.println(val);
        }
    }
}
公共类bubbleSort{
公共静态void main(字符串[]args){
String Homer=“他是埃皮卡斯特和泰勒马科斯的儿子。”+
“据说他是一名宫廷歌手”;
字符串交换;
荷马=荷马。替换(',',');
荷马=荷马。替换('.','');
荷马=荷马。替换(“,”);
String[]words=Homer.split(“”);
for(字符串val:words){
系统输出打印项次(val);
}
System.out.println(“----排序----”;
布尔交换=真;
while(交换){
交换=假;
对于(int i=0;i<(words.length-1);+i){
if(字[i].charAt(0)>字[i+1].charAt(0)){
交换=字[i];
字[i]=字[i+1];
字[i+1]=交换;
交换=真;
}
}
}
for(字符串val:words){
系统输出打印项次(val);
}
}
}
然而,排序后的输出并不像预期的那样

他是Epikaste和Telemachus的儿子,据说他是一个法庭 歌手——悲伤的——埃皮卡斯特,他,他,泰勒马库斯,还有一个宫廷 他儿子说那个歌手是


我哪里出错了?谢谢

排序时,ascii中的大写字母小于小写字母以获得正确的排序将所有大写字母更改为小写或反之亦然排序时,ascii中的大写字母小于小写字母以获得正确的排序将所有大写字母更改为小写或反之亦然排序时猜猜你不喜欢的结果是它将大写(大写)单词排在小写单词之前。这并不奇怪,因为大写字符A-Z使用代码点65到90,而小写字符A-Z使用代码点97到122。因此,在比较中,大写字符总是比小写字符“小”

解决方案:将所有单词转换为小写进行比较。使用
String.toLowerCase()
进行此操作

例如,代替原始代码

for (int i = 0; i < (words.length - 1); ++i) {
    if (words[i].charAt(0) > words[i + 1].charAt(0)) {
for(int i=0;i<(words.length-1);+i){
if(字[i].charAt(0)>字[i+1].charAt(0)){
做得更像

for (int i = 0; i < (words.length - 1); ++i) {
    String w = words[i].toLowerCase();
    String w1 = words[i+1].toLowerCase();
    if (w.charAt(0) > w1.charAt(0)) {
for(int i=0;i<(words.length-1);+i){
字符串w=单词[i].toLowerCase();
字符串w1=单词[i+1].toLowerCase();
如果(w.字符(0)>w1.字符(0)){

我猜您不喜欢的结果是它将大写(大写)单词排在小写单词之前。这并不奇怪,因为大写字符A-Z使用代码点65到90,而小写字符A-Z使用代码点97到122。因此大写字符总是“更小”而不是比较中的小写字符

解决方案:将所有单词转换为小写进行比较。使用
String.toLowerCase()
进行比较

例如,代替原始代码

for (int i = 0; i < (words.length - 1); ++i) {
    if (words[i].charAt(0) > words[i + 1].charAt(0)) {
for(int i=0;i<(words.length-1);+i){
if(字[i].charAt(0)>字[i+1].charAt(0)){
做得更像

for (int i = 0; i < (words.length - 1); ++i) {
    String w = words[i].toLowerCase();
    String w1 = words[i+1].toLowerCase();
    if (w.charAt(0) > w1.charAt(0)) {
for(int i=0;i<(words.length-1);+i){
字符串w=单词[i].toLowerCase();
字符串w1=单词[i+1].toLowerCase();
如果(w.字符(0)>w1.字符(0)){

简单的方法是将所有单词转换为大写或小写

然而,在Java中比较语言单词的正确方法是使用


简单的方法是将所有单词转换为大写或小写

然而,在Java中比较语言单词的正确方法是使用


您的输出首先显示以大写字母开头的单词,然后是以小写字母开头的单词。如果不看代码,我认为您忘记了大写字母和小写字母的不同代码:)类名也应该以大写字母开头letter@sotix谢谢你的提醒!另外,变量名应该先以小写字母开头,然后再输出显示以大写字母开头的单词,然后显示以小写字母开头的单词。如果不看代码,我认为您忘记了大写字母和小写字母的不同代码:)类名也应该以大写字母开头letter@sotix谢谢提醒!另外,变量名应该以小写字母开头谢谢@Kevin有办法排序吗不改变大小写的字母?谢谢@Kevin有没有办法在不改变大小写的情况下对字母进行排序?有没有办法在不改变大小写的情况下对字母进行排序?对字母进行排序?你以为你在对单词进行排序吗?;-)无论如何,这不会改变单词的大小写,它只复制小写字母。(字符串在Java中是不可变的,您不能更改它们,只能进行派生。)排序仍在原始数据中进行。有没有方法在不更改大小写的情况下对字母进行排序?对字母进行排序?以为您在对单词进行排序?;-)无论如何,这不会更改单词的大小写,它只生成小写副本。(字符串在Java中是不可变的,您不能更改它们,只能进行派生。)排序仍在或中进行
if (myCollator.compare(words[i], words[i+1]) > 0)