StringBuilder在代码中有什么问题

问题描述 投票:0回答:1
    class Solution {
    public String mergeAlternately(String word1, String word2) {
        int length = word1.length() + word2.length();
        StringBuilder ans = new StringBuilder(length);
        int left = 0, right = 0, current = 0;
        System.out.println(ans.length());
        while(current < ans.length()) {
            System.out.println("called");
            if(left >= word1.length()) {
                ans.append(word2.charAt(right));
                right++;
            }
            else if(right >= word2.length()) {
                ans.append(word2.charAt(left));
                left++;
            }
            else if(current % 2 == 0) {
                ans.append(word1.charAt(left));
                left++;
            }
            else {
                ans.append(word2.charAt(right));
                right++;
            }
            current++;
        }
        return ans.toString();
    }
    }

问题=>给定两个字符串word1和word2。通过以交替顺序添加字母来合并字符串,从 word1 开始。如果一个字符串比另一个长,则将额外的字母附加到合并后的字符串的末尾。 我努力了: 输入:word1 = "abc", word2 = "pqr" 预期输出:“apbqcr” 我的输出:“”

java string stringbuilder
1个回答
0
投票

初始容量与长度

您的代码:

StringBuilder ans = new StringBuilder(length);

为字符串 bulder 定义一个 initial capacity,但不填充任何文本。请参阅 Javadoc:

构造一个没有字符的字符串生成器,初始容量由容量参数指定。

换句话说,

new StringBuilder( 42 ).length()
返回
0
零。

所以你的测试

while(current < ans.length())
永远不会返回
true
。您的
current
变量永远不会小于零,永远不会为负。

char
是遗产

char
类型从 Java 2 开始就被打破了,从 Java 5 开始就被遗弃了。作为一个 16 位值,
char
不能代表大多数字符。

要使用单个字符,请学习使用 code point 整数。

搜索 Stack Overflow 以了解更多信息,因为这已经被多次介绍了。

© www.soinside.com 2019 - 2024. All rights reserved.