首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计数字符串中的每个元素

计数字符串中的每个元素
EN

Stack Overflow用户
提问于 2022-10-11 20:10:46
回答 3查看 75关注 0票数 0

我有:

代码语言:javascript
运行
复制
String s = "ZpglnRxqenU"

我需要为字符串中的每个字符分配一个数字,例如:

代码语言:javascript
运行
复制
z-1
p-2
g-3
l-4
n-5
r-6
x-7
q-8
e-9
n-10
u-11

我不想数字符的频率。

我试着用HashMap

代码语言:javascript
运行
复制
 Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
          map.put(String.valueOf(s.charAt(i)), i + 1);
 }

但是Map a有唯一的密钥,我第一次丢失了

我怎么数字母?

EN

回答 3

Stack Overflow用户

发布于 2022-10-12 00:48:42

交换地图的键值。使用键号,因为它将是唯一的。

使用NavigableMap来保持它们的有序性。

代码语言:javascript
运行
复制
NavigableMap< Integer , String > = new TreeMap<>() ;

使用常规样式的示例代码。

代码语言:javascript
运行
复制
String input = "ZpglnRxqenU";
int[] codePoints = input.codePoints().toArray();
NavigableMap < Integer, String > numberedCharacters = new TreeMap <>();
for ( int ordinal = 1 ; ordinal <= codePoints.length ; ordinal++ )
{
    numberedCharacters.putIfAbsent(
            ordinal ,
            Character.toString( codePoints[ ordinal - 1 ] )
    );
}

使用streams & lambdas的示例代码。同样的效果,在这种特殊情况下不一定更好。

代码语言:javascript
运行
复制
String input = "ZpglnRxqenU";
int[] codePoints = input.codePoints().toArray();
NavigableMap < Integer, String > numberedCharacters =
        IntStream
                .rangeClosed( 1 , codePoints.length )
                .boxed()
                .collect(
                        Collectors.toMap(
                                Function.identity() ,
                                ordinal -> Character.toString( codePoints[ ordinal - 1 ] ) ,
                                ( o1 , o2 ) -> o1 ,
                                TreeMap :: new )
                );

要从地图中获取所有字符,请调用values。得到的Collection对象承诺按照映射键的迭代顺序进行迭代。

代码语言:javascript
运行
复制
String recreated = String.join( "" , numberedCharacters.values() );

转储到控制台。

代码语言:javascript
运行
复制
System.out.println( "input = " + input );
System.out.println( "numberedCharacters = " + numberedCharacters );
System.out.println( "recreated = " + recreated );

跑的时候。

代码语言:javascript
运行
复制
input = ZpglnRxqenU
numberedCharacters = {1=Z, 2=p, 3=g, 4=l, 5=n, 6=R, 7=x, 8=q, 9=e, 10=n, 11=U}
recreated = ZpglnRxqenU
票数 1
EN

Stack Overflow用户

发布于 2022-10-12 01:05:35

如果要计算字符串中的字符数,请使用s.length();

如果要计算字符串中的不同字符数,则可以使用所编写的代码。map.size()会给出确切的结果,因为映射只存储每个键一次(在您的例子中,字母(它们在java中称为char's,chars是字符的缩写))。

地图中的put()是如何工作的:当您第一次向映射输入一个键时,它会被添加到您所提供的值中,而第二次则会更改该值。

票数 1
EN

Stack Overflow用户

发布于 2022-10-14 19:57:47

巴兹尔的解决方案应该适合你想要的东西,但是如果你严格地想要像你的例子那样建模,你可以有一个List<Pair<Character, Integer>>来存储你的数据。有许多库提供PairTuple结构,或者您可以创建自己的库。填充列表是个人喜好的问题,但本质上,您需要遍历字符数组,将每个字符及其索引映射到new Pair(char, idx)中,然后将它们收集到列表中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74033604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档