如何获得字母的位置

时间:2017-02-19 16:25:16

标签: java

我需要在单词中获取字母索引,例如:

SOMEWORDS | 743295618

D - 单词中的第一个字母(相对于字母),所以_ _ _ _ _ _ _ 1 _ E - 秒 - > _ _ _ 2 _ _ _ 1 _ M - 第三 - > _ _ 3 2 _ _ _ 1 _ ...等

STAR | 3412

LETTER | 314526

所以,我需要在java上编写函数,该函数使用String并使用索引获取带有索引或int数组的int! 抱歉我的英文不好!

2 个答案:

答案 0 :(得分:0)

假设您的字母和单词仅包含大写ASCII字母,您可以这样定义:

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

然后你只需要对字符串的每个字符进行迭代(你应该能够做到这一点,或者至少使用String javadoc来解决它),并使用

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

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

然后你会使用

int index = ALPHABET.get(currentCharacter);

答案 1 :(得分:0)

有很多方法可以解决这个问题(我刚刚再次阅读了这个问题并发现我之前可能误解了,所以更新了这个答案)。

我认为最简单的是双循环。外循环依次取字母表中的每个字母。但是,开始声明int数组与单词的长度相同。同时将已编号字母的计数初始化为0.如果使用大写英文字母,则外循环可以是for (char letter = 'A'; letter <= 'Z'; letter++)。内循环一次通过你的单词一个字符。如果char与字母相同,则递增计数器并将其分配到与单词中的位置对应的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]。现在循环浏览此列表。对于每个对象,将1添加到对象的索引,并将此总和分配到从对象获得的索引中的int数组(如前所述)。示例:在索引0处您有E1,因此将0 + 1(即1)放入yourNumberArray[1]. At index 1 you have E4, so put 1 + 1 into yourNumberArray [4]。这将得到与第一种方法相同的结果。

旧答案

旧答案会为LETTER提供214413。我相信你现在需要315624没有重复的数字。

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

为了同时排序和删除重复项,我建议您使用TreeSet<Character>。只需将单词的所有字母添加到集合中,它将忽略重复。将集合中的字符取出为String(您可以使用集合的stream或其iterator方法,按正确的顺序分发字符,并{{1} })。使用字符串的StringBuilder方法确定排序字符串中char的索引(只要给出方法indexOf(int),无论参数类型为char)。向索引添加1,因为索引从0开始,您需要一个基于1的数字(您不需要203415用于int,而是314526)。就是这样。

我会把编码留给你。快乐的编码。

相关问题