一、字符数组与字符串转换
字符数组与字符串之间的转换是Java编程中常见的操作。字符串类提供了toCharArray()方法,将字符串转换为字符数组。
String str = "Hello World"; char[] charArray = str.toCharArray(); System.out.println(Arrays.toString(charArray));
以上代码输出结果为:[H, e, l, l, o, , W, o, r, l, d]
而将字符数组转换为字符串,则使用String类的构造函数或valueOf()方法。
char[] charArray = {'h', 'e', 'l', 'l', 'o'};
String str1 = new String(charArray);
String str2 = String.valueOf(charArray);
System.out.println(str1);
System.out.println(str2);
以上代码输出结果均为:hello
二、字符数组的操作
1、字符数组的拼接
字符数组的拼接可以使用Arrays类的copyOf()方法或System类的arraycopy()方法。
char[] charArray1 = {'h', 'e', 'l', 'l', 'o'};
char[] charArray2 = {' ', 'w', 'o', 'r', 'l', 'd'};
char[] charArray3 = Arrays.copyOf(charArray1, charArray1.length + charArray2.length);
System.arraycopy(charArray2, 0, charArray3, charArray1.length, charArray2.length);
System.out.println(new String(charArray3));
以上代码输出结果为:hello world
2、字符数组的截取
要截取字符数组的一部分可以使用Arrays类的copyOfRange()方法。
char[] charArray = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};
char[] subCharArray = Arrays.copyOfRange(charArray, 6, 11);
System.out.println(new String(subCharArray));
以上代码输出结果为:world
3、字符数组的比较
字符数组的比较可以使用Arrays类的equals()方法或Arrays类的compare()方法。
char[] charArray1 = {'h', 'e', 'l', 'l', 'o'};
char[] charArray2 = {'h', 'e', 'l', 'l', 'o'};
char[] charArray3 = {'w', 'o', 'r', 'l', 'd'};
System.out.println(Arrays.equals(charArray1, charArray2));
System.out.println(Arrays.compare(charArray1, charArray3));
以上代码输出结果分别为:true和-15(说明charArray1在字典序比charArray3小)
三、字符数组排序
可以使用Arrays工具类的sort()方法对字符数组排序。
char[] charArray = {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};
Arrays.sort(charArray);
System.out.println(new String(charArray));
以上代码输出结果为:dehllloorw
四、字符数组的应用
1、密码加密
密码字符串容易被第三方破解,可以使用字符数组进行加密。
char[] passwordArray = {'h', 'e', 'l', 'l', 'o'};
for(int i = 0; i < passwordArray.length; i++){
passwordArray[i] = (char)(passwordArray[i] + 1);
}
System.out.println(new String(passwordArray));
以上代码输出结果为:ifmmp
2、图像转字符画
将图像转换为字符画可以使用字符数组进行存储。
BufferedImage image = ImageIO.read(new File("test.jpg"));
int width = image.getWidth();
int height = image.getHeight();
char[][] charArray = new char[height][width];
for(int i = 0; i < height; i++){
for(int j = 0; j < width; j++){
int pixel = image.getRGB(j, i);
charArray[i][j] = getCharFromPixel(pixel);
}
}
System.out.println(Arrays.deepToString(charArray));
以上代码实现了将test.jpg转化为字符画的效果,输出的结果是一个字符数组。
3、字符串匹配
字符串匹配中,可以使用KMP算法或Boyer-Moore算法,对于字符串的前缀、后缀等操作需要借助字符数组来实现。
public static int kmp(String str, String pattern) {
char[] s = str.toCharArray();
char[] p = pattern.toCharArray();
int[] next = getNext(p);
int i = 0, j = 0;
while (i < s.length && j < p.length) {
if (j == -1 || s[i] == p[j]) {
i++;
j++;
} else {
j = next[j];
}
}
if (j == p.length) {
return i - j;
} else {
return -1;
}
}
以上代码是KMP算法的实现,其中对于字符串转字符数组的操作是非常关键的。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/160944.html
微信扫一扫
支付宝扫一扫