Java 用数字替换字符数组中的字符时出现问题

Java 用数字替换字符数组中的字符时出现问题,java,char,chararray,Java,Char,Chararray,给定一个字符串,我必须用它们在数组中各自的位置替换所有元音。但是,我的代码返回一些奇怪的符号,而不是数字。问题出在哪里 String s = "this is my string"; char p = 1; char[] formatted = s.toCharArray(); for(int i = 0; i < formatted.length; i++) { if(format

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

        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);
String s=“这是我的字符串”;
charp=1;
char[]格式化=s.toCharArray();
for(int i=0;i

注意:数字大于10

字符
'1'
的值与数字
1
的值不同

你可以改变

char p = 1;


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

字符
'1'
的值与数字
1
的值不同

this is my   s  t  r  i  n g
012345678910 11 12 13 14
你可以改变

char p = 1;

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

this is my   s  t  r  i  n g
012345678910 11 12 13 14

i
string
中的位置是
14
,但
14
不是字符;这是一个数字字符串。这意味着您需要处理字符串而不是字符。使用
作为分隔符拆分
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);
    }
}
正则表达式,
(?i)[aeiou]
为其中一个元音指定不区分大小写的匹配,其中
(?i)
指定不区分大小写


i
string
中的位置是
14
,但
14
不是字符;这是一个数字字符串。这意味着您需要处理字符串而不是字符。使用
作为分隔符拆分
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);
    }
}

正则表达式,
(?i)[aeiou]
为其中一个元音指定不区分大小写的匹配,其中
(?i)
指定不区分大小写

问题的根源已经在评论中

在java中,这些类型在内存大小及其表示形式上会有所不同

int x=1; 和 字符y='1'

不具有相同的值,这是因为许多数字表示与ascii码相关,并且必须将值分配到y才能得到打印的数字1是十六进制0x31或DEC 49

看看ascci表


问题的根源已经在评论中

在java中,这些类型在内存大小及其表示形式上会有所不同

int x=1; 和 字符y='1'

不具有相同的值,这是因为许多数字表示与ascii码相关,并且必须将值分配到y才能得到打印的数字1是十六进制0x31或DEC 49

看看ascci表


字符
'1'
的值与数字
1
的值不同。您可以使用
charp='1'只要插入的数字数小于10。索引14元音会发生什么情况?/请注意整数和字符ascii值。/您可以将字母循环到StringBuffer,并将字母或循环索引字符串
“”+(i+1)
值作为字符串附加。
i
string
中的位置是
14
,但
14
不是字符;这是一个数字字符串。字符
'1'
的值与数字
1
的值不同。您可以使用
charp='1'只要插入的数字数小于10。索引14元音会发生什么情况?/请注意整数和字符ascii值。/您可以将字母循环到StringBuffer,并将字母或循环索引字符串
“”+(i+1)
值作为字符串附加。
i
string
中的位置是
14
,但
14
不是字符;这是一个数字字符串。它必须覆盖10以上的数字,那么我该怎么做?你可以切换到使用字符数组而不是字符数组。它必须覆盖10以上的数字,那么我该怎么做?你可以切换到使用字符数组而不是字符数组。