一、字符数组与字符串转换
字符数组与字符串之间的转换是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