在一系列字符中查找特定字符

时间:2011-09-28 13:45:23

标签: string blackberry java-me char

我正在做一个应用程序,我想在一个字符数组中找到一个特定的字符。换句话说,我有以下char数组:

char[] charArray= new char[] {'\uE001', '\uE002', '\uE003', '\uE004', '\uE005', '\uE006', '\uE007', '\uE008', '\uE009'};

在某些时候,我想检查'\uE002'中是否存在字符charArray。我的方法是对charArray中的每个字符进行循环,然后查找它是否存在。

for (int z = 0 ; z < charArray; z ++) {
    if (charArray[z] == myChar) {
        //Do the work
    }
}

除了制作一个char数组并通过循环每个char来找到该字符之外,还有其他解决方案吗?

6 个答案:

答案 0 :(得分:3)

一种选择是预先sort charArray并使用Arrays.binarySearch(charArray, myChar)。非负返回值表示myChar中存在charArray

char[] charArray = new char[] {'\uE001', '\uE002', '\uE003', '\uE004', '\uE005', '\uE006', '\uE007', '\uE008', '\uE009'};
Arrays.sort(charArray); // can be omitted if you know that the values are already sorted
...
if (Arrays.binarySearch(charArray, myChar) >= 0) {
  // Do the work
}

编辑避免使用Arrays模块的替代方法是将字符放入字符串中(在初始化时),然后使用String.indexOf()

String chars = "\uE001...";
...
if (chars.indexOf(myChar) >= 0) {
   // Do the work
}

这与您已经在做的事情没有太大的不同,只是它需要更少的代码。

如果n的大小为charArray,则第一个解决方案为O(log n),而第二个解决方案为O(n)

答案 1 :(得分:1)

您可以使用哈希/地图来检查角色的存在。根据散列/映射内部结构,此方法具有更好的O(log n)或O(1)时间。

答案 2 :(得分:1)

如果您无法访问Arrays,因为您使用的是JavaME,那么您应该尝试:

  • 或者实现排序数组和自己进行二进制搜索
  • 或者只使用O(n)解决方案,无论如何都是一个很好的解决方案。

您的解决方案是O(n),以及aix所述的解决方案。

您可以尝试使用Map,但这取决于您在阵列中的元素数量。如果您认为阵列中的元素不会超过1000个,请使用O(n)解决方案。但是如果你认为你可能有一个未知数量的元素,那么Map将是一个可靠的选择,提供更好的解决方案。

答案 3 :(得分:1)

您可以使用net.rim.device.api.util.Arrays.getIndex(char[] array, char element)

答案 4 :(得分:0)

这取决于您使用的Java ME configuration / profile。如果你在CDC上,那么检查是否支持Java SE 1.3 Collections框架的哪些部分(只需查找针对您的设备的javadoc并查看java.util包)。另一件值得检查的事情是你的设备是否有一些黑莓特定的API扩展来处理集合。

如果你只限于最低限度的CLDC / MIDP,那么除了你提到的其他解决方案就是将向Chars添加字符并使用Vector.contains(Object)

答案 5 :(得分:-2)

如果您不想自己实现它,可以在apache commons项目中使用ArrayUtils:

ArrayUtils apache-commons