【问题标题】:Problem replacing char in char array with a digit用数字替换 char 数组中的 char 问题
【发布时间】:2021-02-15 15:24:28
【问题描述】:

给定一个字符串,我必须用它们在数组中的相应位置替换所有元音。但是,我的代码返回一些奇怪的符号而不是数字。问题出在哪里?

        String s = "this is my string";
        char p = 1;
        char[] formatted = s.toCharArray();
        for(int i = 0; i < formatted.length; i++) {
            if(formatted[i] == 'a' ||formatted[i] == 'e' ||formatted[i] == 'i'
                    ||formatted[i] == 'o' ||formatted[i] == 'u') {
                formatted[i] = p;
            }
            p++;
        }
        s = String.valueOf(formatted);
        System.out.println(s);

P.S:数字大于 10

【问题讨论】:

  • 字符'1' 与数字1 具有不同的值。只要您插入的数字少于 10 个,您就可以使用char p = '1';
  • 索引 14 元音应该怎么办? / 注意整数和char ascii值。 / 您可以将字母循环到 StringBuffer 并将循环索引 ""+(i+1) 值的字母或字符串附加为字符串。
  • istring 中的位置是1414 不是字符;这是一个数字字符串。

标签: java char chararray


【解决方案1】:
this is my   s  t  r  i  n g
012345678910 11 12 13 14

istring中的位置是1414不是字符;它是一个数字字符串。这意味着您需要处理字符串而不是字符。使用""作为分隔符拆分s,处理生成的数组,最后使用""作为分隔符将数组连接回字符串。

class Main {
    public static void main(String[] args) {
        String s = "this is my string";
        String[] formatted = s.split("");
        for (int i = 0; i < formatted.length; i++) {
            if (formatted[i].matches("(?i)[aeiou]")) {
                formatted[i] = String.valueOf(i);
            }
        }
        s = String.join("", formatted);
        System.out.println(s);
    }
}

输出:

th2s 5s my str14ng

正则表达式(?i)[aeiou] 指定不区分大小写的匹配其中(?i) 指定不区分大小写的元音之一。 Test it here.

【讨论】:

    【解决方案2】:

    字符'1' 与数字1 具有不同的值。

    你可以改变

    char p = 1;
    

    char p = '1';
    

    我认为这会给你你想要的,只要你不试图在你的字符串中插入超过 9 个数字。否则,您将需要处理插入额外的数字,而您无法在 char 数组中执行此操作,因为它具有固定长度。

    【讨论】:

    • 必须覆盖10以上的数字,那我该怎么做呢?
    • 你可以切换到使用StringBuilder而不是char数组。
    【解决方案3】:

    问题的根源已经在 cmets,

    在 java 中,类型会影响内存大小及其表示

    int x = 1; 和 char y = '1'

    没有保持相同的值,这是因为许多数字表示都与 ascii 代码相关,并且您必须分配给 y 以打印数字 1 的值是 HEX 0x31 或 DEC 49。

    看一下 ascci 表

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 2011-11-24
      • 2018-07-30
      • 2022-12-11
      • 1970-01-01
      • 2014-06-08
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多