首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串转换为另一个字符串

将字符串转换为另一个字符串
EN

Stack Overflow用户
提问于 2022-10-12 11:10:09
回答 2查看 86关注 0票数 2

我有:

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

我需要把它改为:

代码语言:javascript
运行
复制
String result = "N-Yy-Fff-Ffff-Sssss-Gggggg-Eeeeeee-Yyyyyyyy-Yyyyyyyyy-Llllllllll-Bbbbbbbbbbb";

到目前为止,我的代码如下:

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

// Then I convert it to list
for (Map.Entry<Integer, String> m : map.entrySet()) {
    for (int i = 0; i < m.getKey(); i++) {
        tempRes.add(m.getValue());
    }
}

// Then I capitalize first letters and add dash
ListIterator<String> iterator = tempRes.listIterator();
while (iterator.hasNext()) {
    iterator.set(iterator.next().toLowerCase());
}

result.add(tempRes.get(0).toUpperCase());
for (int i = 1; i < tempRes.size(); i++) {
    if (tempRes.get(i).equalsIgnoreCase(tempRes.get(i - 1))) {
        result.add(tempRes.get(i));
    } else {
        result.add("-");
        result.add(tempRes.get(i).toUpperCase());
    }
}

// And finally I add elements from result list to string:
for (int i = 0; i < result.size(); i++) {
    finalResult += result.get(i);
}

因此,我得到:

代码语言:javascript
运行
复制
"N-Yy-Fffffff-Sssss-Gggggg-Eeeeeee-Yyyyyyyyyyyyyyyyy-Llllllllll-Bbbbbbbbbbb"

但我需要:

代码语言:javascript
运行
复制
"N-Yy-Fff-Ffff-Sssss-Gggggg-Eeeeeee-Yyyyyyyy-Yyyyyyyyy-Llllllllll-Bbbbbbbbbbb";

我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-12 11:31:50

代码语言:javascript
运行
复制
for ( int i = 0 ; i < input.length() ; i++){
      System.out.print(Character.toUpperCase(input.charAt(i)));
      for (int j = 0; j < i; j++){
          System.out.print(Character.toLowerCase(input.charAt(i)));
      }
      if ( i < input.length() - 1)
        System.out.print("-");
  }
票数 2
EN

Stack Overflow用户

发布于 2022-10-12 11:54:12

这看起来是一个方便的流操作。

代码语言:javascript
运行
复制
AtomicInteger index = new AtomicInteger(0);
String result = "NyffsGeyylB"
    .chars()
    .mapToObj(c -> String.valueOf((char) c))
    .map(s -> s.repeat(index.addAndGet(1)))
    .map(s -> s.substring(0,1).toUpperCase() + s.substring(1).toLowerCase())
    .collect(Collectors.joining("-"));
System.out.println(result);

String.

  • Increase

  • 定义了一个累加器来保存当前索引。

  • 使用accumulator.

  • Convert将字符作为IntStream获取,该字符为单个字母,并通过accumulator.

  • Convert中的值(第一个字母到大写,rest到小写)重复单个字母字符串。

  • 连接"-“并返回结果。

在审查员看来,方便可能是也可能不是。

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

https://stackoverflow.com/questions/74040852

复制
相关文章

相似问题

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