在Java编程中,有时我们需要处理字符串并进行特定操作,如统计字符个数或反序非相同字符。本文将详细介绍这两种方法,并提供示例代码。 让我们关注如何统计字符串中的字符个数。在给定的代码片段中,我们看到一个名为`Test2`的类,其中包含一个`main`方法。这个方法首先定义了一个字符串`src`,然后通过`replaceAll`方法移除所有空格。接下来,它创建了一个`ArrayList<Character>`和一个大小为256的整型数组`bb`,用于存储每个字符的出现次数。字符数组`cs`由`src`转换而来,然后通过双指针法实现字符串的反转。在反转过程中,两个指针分别从头和尾向中间移动,交换对应的字符。反转完成后,遍历字符数组,如果字符在`bb`数组中的计数小于1,说明该字符在原字符串中只出现了一次,将其添加到列表`list`中。打印出这些非重复字符及其出现次数。 ```java public class Test2 { public static void main(String[] args) { String src = "A B C D E B C"; src = src.replaceAll(" ", ""); // 去除空格 System.out.println("去除空格后字符串:" + src); List<Character> list = new ArrayList<>(); int[] bb = new int[256]; char[] cs = src.toCharArray(); // 字符串反转 int mid = cs.length / 2; int idx = cs.length - 1; for (int i = 0; i < mid; i++) { char tmp = cs[i]; cs[i] = cs[idx]; cs[idx] = tmp; idx--; } // 统计非重复字符 for (char c : cs) { if (bb[c] < 1) { list.add(c); } bb[c]++; } // 打印非重复字符 for (char c : list) { System.out.print(c); } System.out.println(); // 打印非重复字符及其出现次数 for (int i = 0; i < list.size(); i++) { char c = list.get(i); System.out.println(c + " " + bb[c] + "次"); } } } ``` 接着,我们看如何查找一个字符串(`a`)中是否存在另一个字符串(`b`)中的字符。这里有一个名为`Test`的类,同样包含一个`main`方法。这个方法首先创建了两个字符串`a`和`b`,然后为`b`中的每个字符创建一个大小为256的字节数组`bb`,并初始化每个元素为0。接着,遍历`b`的字符,将对应位置的字节设为1。然后,遍历`a`的字符,检查其在`bb`数组中的值是否为1,如果是,则表示该字符在`b`中出现过,打印出来。 ```java public class Test { public static void main(String[] args) { String a = "abcd,efg"; String b = ")(*&^%$#@![]{},.//;:'? <>"; byte[] bb = new byte[256]; char[] cs = b.toCharArray(); for (char c : cs) { bb[c] = 1; } cs = a.toCharArray(); for (char c : cs) { if (bb[c] == 1) { System.out.println(c); } } } } ``` 这两个方法在处理字符串时都具有较高的效率,尤其是对于小规模字符串。在统计字符个数时,使用数组可以快速访问和更新计数值;在查找字符是否出现时,利用预处理的字节数组可以高效地进行查找。然而,如果字符串非常大,这种方法可能会受到内存限制的影响。在这种情况下,可以考虑使用更高级的数据结构,如哈希表,以降低空间复杂度并保持较高的时间效率。
- 粉丝: 2
- 资源: 902
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助