【问题标题】:Take out part of a char array and turn it into a string - Java取出 char 数组的一部分并将其转换为字符串 - Java
【发布时间】:2023-03-10 07:14:01
【问题描述】:

在 Java 中,是否有一种预制方法可用于获取字符数组的某些选定索引,将这些索引定义的术语粘贴在一起并将其作为字符串返回?我在这里寻找一种方法的原因是我想避免创建另一个数组来保存我选择的值。我正在寻找的是这样的东西:

public String charArrayToString(char[] array, int startingIndex, int lastIndex) {
        // ignore any index that is outside of the startingIndex - lastIndex range
        // turn array[startingIndex], array[startingIndex + 1] ... array[lastIndex] into a string
}

【问题讨论】:

    标签: java string char type-conversion


    【解决方案1】:

    听起来像你想要的:

    return new String(array, startingIndex, lastIndex + 1 - startingIndex);
    

    ...对startingIndexlastIndex 进行了一些边界检查,例如

    startingIndex = Math.max(startingIndex, 0);
    lastIndex = Math.min(lastIndex, array.length - 1);
    if (startingIndex > lastIndex) {
        // Return empty string? Throw an exception?
    }
    return new String(array, startingIndex, lastIndex + 1 - startingIndex);
    

    请注意,如果您将上限设置为独占 - 就像大多数 Java API 一样 - 您可以去掉很多这些 +1 和 -1 位。

    【讨论】:

    • 最后一个参数是计数,而不是像子串一样的结尾;)
    • @AmitD:我更喜欢在方法本身中验证参数,这样您就可以提供更清晰的信息。但是是的。
    • 我猜如果从新的 String 方法进行相同的检查就足够了 -if (startingIndex >= 0 && 0 <= lastIndex && lastIndex <= array.length - startingIndex) {return string} else{return error }
    【解决方案2】:

    我会使用构造函数

    public String charArrayToString(char[] array, int startingIndex, int lastIndex) {
        return new String(array, startIndex, lastIndex - startIndex + 1);
    }
    

    根据您对结果的处理方式,更好的解决方案可能是使用 StringBuilder.append

    char[] coords = "000175001022".toCharArray();
    
    StringBuilder sb = new StringBuilder();
    sb.append("( ");
    sb.append(coords, 0, 6);
    sb.append(", ");
    sb.append(coords, 6, 6);
    sb.append(" )");
    System.out.println(sb); // prints ( 000175, 001022 )
    

    【讨论】:

    • 我认为您需要在这里 +1,因为问题似乎要 include lastIndex。
    【解决方案3】:
    public StringBuilder append(char str[], int offset, int len) {
    

    【讨论】:

    • 你能举个例子说明你将如何使用这种方法吗?
    • 如果 OP 想要将结果添加到字符串中,这将是最佳选择。
    • @PeterLawrey:现在谁在乎 Jon Skeet 已经回答了这个问题 :)
    • Jon Skeet 经常回答问题,但您仍然可以获得一些声誉。 ;)
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2023-02-18
    • 2018-07-04
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多