有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取word中字母的位置

我需要获取word中字母的索引,例如:

一些词| 743295618

D-单词中的第一个字母(相对于字母表),所以uuuuu1 ue-第二个->;uuu2 uu1 um-第三->;u3 2 _ _ _ 1 _ ... 等

星| 3412

信| 314526

所以,我需要在java上编写一个函数,它接受字符串并用索引返回int或用这个索引返回int数组! 对不起,我的英语不好


共 (2) 个答案

  1. # 1 楼答案

    假设你的字母表和单词只包含大写ASCII字母,你可以这样定义它:

    private static final int[] ALPHABET = [
        12, // A is at index 12
        7, // B is at index 7
        ...
        22 // Z is at index 22
    }
    

    然后,您只需要遍历字符串的每个字符(您应该能够做到这一点,或者至少可以使用字符串javadoc计算出来),然后使用

    int index = ALPHABET[currentCharacter - 'A']; 
    

    对于更通用的解决方案,可以将字母表定义为Map<Character, Integer>,其中键是字母表中的所有字符,值是字母表中字符的索引

    然后你会使用

    int index = ALPHABET.get(currentCharacter);
    
  2. # 2 楼答案

    有很多方法可以完成这个任务(我只是再次阅读了这个问题,发现我以前可能误解了,所以更新了这个答案)

    我认为最简单的是双环。外循环依次取字母表中的每个字母。但是,开始声明与单词长度相同的int数组。还将已编号字母的计数初始化为0。如果使用大写英文字母,则外部循环可以是for (char letter = 'A'; letter <= 'Z'; letter++)。内部循环一次遍历一个字符。如果字符与字母相同,则递增计数器并将其分配到int数组中与单词中的位置相对应的位置。例如,在检查LETTER中的E时,您将在索引1处遇到它(基于0),因此将数字1放入数组的索引1中。您将在索引4处再次遇到E,将计数器增加到2,并将这2分配到数组的索引4中。完成字母表后,数组中的所有单元格都应该有不同的数字。如果数组中还有0,那是因为这个单词包含的不是大写的英文字母

    通常情况下,大多数字母都不在你的单词中,所以大多数情况下,通过外循环,什么都不会发生。别担心。除此之外,这种方法基本上模仿了你在问题中概述的程序。它首先在正确的位置填入1,然后填入2,以此类推

    另一个选择是对字母进行排序。但你还是要知道他们来自哪里。因此,对于这个选项,声明一个包含两个字段的类,字母及其在原始单词中的索引。为单词的每个字母创建一个类的对象。将所有对象放入列表或数组中LETTER将变成类似于[L0, E1, T2, T3, E4, R5]按字母对列表或数组排序。让类实现Comparable接口可能是最简单的方法(另一种选择是Comparator)。使用标准的Java sort方法,比如Collections.sort()List.sort()。它们是稳定的,也就是说,不会交换相同的字母,因此您可以确保之前的列表或数组将被排序为[E1, E4, L0, R5, T2, T3]。现在循环浏览这个列表。对于每个对象,向该对象的索引中添加一个,并将该和分配到从该对象获得的索引中的int数组(如前所述)。例如:在索引0处有E1,所以将0+1(即1)放入yourNumberArray[1]. At index 1 you have E4, so put 1 + 1 intoyourNumberArray[4]。这将给出与第一种方法相同的结果

    旧答案

    旧的答案是214413。我相信现在你们需要315624,没有重复的数字

    第一步是按字母顺序对单词中的字母进行排序,以确定它们在字母表中的顺序。字母的自然顺序与英语字母表中的顺序一致(如果你需要其他字母表,这是一个复杂的问题,但可以做到,不太难)。如果只对所有字母进行排序,例如LETTER变成EELRTT,则排序数组中的位置由于重复而与顺序不完全对应

    为了同时对重复项进行排序和消除,我建议您使用TreeSet<Character>。只需将单词的所有字母添加到集合中,它就会忽略重复的字母。将集合中的字符放入String(您可以使用集合的stream或其iterator方法,它们按正确的顺序分发字符,然后使用StringBuilder)。使用字符串的indexOf(int)方法来确定排序字符串中字符的索引(只需给方法一个char,不管参数的类型是int)。向索引中添加1,因为索引是基于0的,并且需要一个基于1的数字(对于LETTER,您不需要203415,而是314526)。就这样

    我将把代码留给你。快乐编码