java - 如何跳过并按逐行读取的字母字符串数组排序

标签 java

我正在逐行读取文件,我需要按字母顺序对行进行排序,例如,在下面的示例中,它应该按每个单词的第一个字母排序并输出。我陷入了如何按每个单词的第一个字符按字母顺序对其进行排序并保留每个单词前面的数字的问题。任何帮助表示赞赏。提前致谢。

output: 567 cat
        123 dog

FILE2 = "123 dog\n567 cat\n";

String args[] = {"-a", "5", inputFile.getPath()};

String expected = 567 cat
                  123 dog

我尝试过读取行并进行排序,但它首先根据数字进行排序。

if (arguments.equals("-a")) {                      
   List<String> lines = Files.readAllLines((Paths.get(filename)));

    List<String> matchedLines = lines.stream().sorted()
                                     .collect(Collectors.toList());

最佳答案

您可以执行以下操作(请注意,我没有在文件中放入任何内容,您可以像您已经做的那样轻松地从文件中获取字符串)。以下代码假设您已从文件中获取字符串:

public static void main(String[] args) {
    //what we have got from file
    String text = "123 dog\n567 cat\n";
    //split text to substrings by new line
    String[] splitted = text.split("\n");
    // create treemap and sort it from greatest to lowest number
    Map<Integer, String> mapOfStrings = new TreeMap<Integer, String>().descendingMap();
    //put all substrings into our map, following assumes a form that first substring is a text and second substring is an integer
    for (int i = 0; i < splitted.length; i++) {
        mapOfStrings.put(Integer.valueOf(splitted[i].substring(0, splitted[i].indexOf(" "))), splitted[i].substring(splitted[i].indexOf(" "), splitted[i].length()));
    }
   //iterate thru map, for each entry in it print its key and value in single line
    for (Map.Entry<Integer, String> entry : mapOfStrings.entrySet()) {
        System.out.println(entry.getKey() + " " + entry.getValue());
    }
}

更新2:

如果您想按字母(从 a 到 z)排序,以下代码就足够了:

 public static void main(String[] args) {
        String text = "123 dog\n567 cat\n4 zebra\n1983 tiger\n1 lion\n383 turtle";
        String[] splitted = text.split("\n");
        System.out.println(Arrays.asList(splitted));
        Map<String, Integer> mapOfStrings = new TreeMap<String, Integer>();
        for (int i = 0; i < splitted.length; i++) {
            mapOfStrings.put(splitted[i].substring(splitted[i].indexOf(" "), splitted[i].length()),Integer.valueOf(splitted[i].substring(0, splitted[i].indexOf(" "))));

        }

        for (Map.Entry<String, Integer> entry : mapOfStrings.entrySet()) {
            System.out.println(entry.getValue()+ " " + entry.getKey());
        }
    }

关于java - 如何跳过并按逐行读取的字母字符串数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55562766/

相关文章:

java - 如何将日期插入mysql?

java - 使用 decimalFormat 错误设置精度 - Java

java - 通过 Cygwin 部署 java

java - 如何将列表(java.util.list)中的值传递给paint方法?

java - 将 Eclipse 项目导入 Android Studio : Google Maps API

java - 系统找不到 XSL 引用的 DTD

java - 如何列出所有根集合并获取所有产品?

java - 使用 jsoup 从 XML 流中获取数据

Java while 循环 boolean 求值

java - 高效、简洁的 API 性能测量