【问题标题】:java string to char array recognising spacesjava字符串到char数组识别空格
【发布时间】:2016-10-24 18:51:32
【问题描述】:

我正在尝试编写一些 java,从而将字符串传递到 char 数组中,此时我已经使该位工作正常,但是我现在需要增加功能,以便数组能够识别空格在原始字符串中并将它们输出到数组中或将它们更改为'-',以便代码的输出将具有可见的空格。

private static char[] checkForJ(String encodeInput){
        StringBuilder tempString = new StringBuilder();

        encodeInput = encodeInput.toLowerCase();
        char[] ch  = encodeInput.toCharArray();
        for(char x : ch){
            if(x == ' '){

                x = '-';
                tempString.append(x);
            }
            if(x == 'j'){
                x = 'i';
                tempString.append(x);
            }else {
                tempString.append(x);
            }
        }
        String finalString = tempString.toString();
        char[] newChar = finalString.toCharArray();
        return newChar;

String 被外部传递到方法中,然后输出数组以进行更多处理。

输入为:abc def ghi jkl

预期输出:abc-def-ghi-ikl

实际输出:abcdefghiikl

【问题讨论】:

  • 目前您为每个空格添加- 两次。这就是你面临的问题吗?很难说 - 你没有给出输入/预期输出/实际输出的例子。请提供minimal reproducible example
  • return encodeInput.replace(' ','-').replace('j','i').toCharArray();
  • @4castle replaceAll
  • @Zircon replaceAll 适用于您使用正则表达式的情况。
  • (我不确定您所说的“我已经尝试过您的示例”是什么意思 - 我没有提供示例。您是说 4castle 吗?)

标签: java arrays string


【解决方案1】:

一个小改动解决了这个问题:在第二个 if 之前添加 else

private static char[] checkForJ(String encodeInput){
    StringBuilder tempString = new StringBuilder();
    encodeInput = encodeInput.toLowerCase();
    char[] ch  = encodeInput.toCharArray();
    for(char x : ch){
        if(x == ' '){
            x = '-';
            tempString.append(x);
        }else if(x == 'j'){
            x = 'i';
            tempString.append(x);
        }else {
            tempString.append(x);
        }
    }
    String finalString = tempString.toString();
    char[] newChar = finalString.toCharArray();
    return newChar;
}

但是,这很罗嗦。可以通过以下方式一次性完成:

private static char[] checkForJ(String encodeInput){
    return encodeInput.toLowerCase()
                      .replace(' ','-')
                      .replace('j','i')
                      .toCharArray();
}

Ideone Demo

【讨论】:

  • 非常感谢,我现在已经完成了这一部分,并且对结果更满意。
  • 由于 tempString.append(x); 在 if/else 两种情况下都被执行,所以如果 else 是它唯一的指令,那么它是没有意义的。只需在if 之后调用它。另外if(x == 'j') 很可能应该是else if(x == 'j'),以避免我们将空间更改为j,然后再次测试x 是否为j 并将其替换为i
  • @Pshemo 这更有意义。我已经更新了。不过,我将避免提高效率,因为无论如何他们都应该使用单线。
  • 好的,我又把它弄坏了。 @4castle,使用以下代码: System.out.println("checkJ " + encodeOutput);我得到带有“hello world”输入字符串的“checkJ [C@1540e19d”的输出,但是如果我删除(“checkJ”+)它返回“hello-world”。有什么想法吗?
  • @DavidPinchen println 方法很少。其中一个是println(char[] array),另一个是print(Object)。当您调用print("foo"+someCharArray) 时,编译器会将其视为print("foo"+someCharArray.toString()),因此它首先会从数组调用toString(这将创建[C@1540e19d,因为这是每个数组都从Object 继承的实现),然后它将与@ 连接起来987654342@ 并打印结果。如果您调用print(someCharArray),那么将调用println(char[] array) 而不是println(Object),它只会打印数组中的每个字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 2021-05-23
  • 2012-07-25
  • 1970-01-01
  • 2021-10-05
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多