Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排序忽略标点符号(Java)_Java_Sorting_Compareto - Fatal编程技术网

排序忽略标点符号(Java)

排序忽略标点符号(Java),java,sorting,compareto,Java,Sorting,Compareto,我正在尝试对Android ListView对象进行排序。我目前正在使用以下代码: // Sort terms alphabetically, ignoring case adapter.sort(new Comparator<String>() { public int compare(String object1, String object2) { return object1.compareToIgnoreCase(object

我正在尝试对Android ListView对象进行排序。我目前正在使用以下代码:

  // Sort terms alphabetically, ignoring case
  adapter.sort(new Comparator<String>() {
        public int compare(String object1, String object2) {
            return object1.compareToIgnoreCase(object2);
        };
应分类如下:

car
c.a.t.
cat
(事实上,两只猫(猫或c.a.t.)中哪一只先到并不重要,只要它们排在另一只的旁边)

有没有一个简单的方法来解决这个问题?我认为解决方案包括从字符串中提取字母数字字符,然后比较这些字符,然后将它们返回到以前的状态,并再次包含非字母数字字符。

这应该可以做到:

return object1.replace(".", "").compareToIgnoreCase(object2.replace(".", ""));

我认为没有更简单的方法。

当你比较时,删除你不关心的字符

public int compare(String str1, String str2) {
    String remove = "[\\.:',]"; // change this to all to characters to remoce
    return str1.replaceAll(remove, "").compareToIgnoreCase(object2.replaceAll(remove, ""));
};

如果唯一的标点符号是句点,则此操作有效。您不能使用
String.replace
方法替换多个字符,但可以使用
String.replaceAll
@JuanMendes谢谢,我知道。OP的示例显示了一个句点。但问题是标点符号。删除字符串为+1。对我来说,Baz的解决方案很有效,因为它不使用replaceAll。不知道为什么replaceAll不起作用,但我喜欢在字符串中删除字符。干杯,你的解决方案现在效果更好了!这会导致我的加载时间增加一点,在实践中,我将使用Baz的方法(对于我的特定应用程序,在加载时间内,我只会选择一个字符删除),但您的方法回答了我关于多个标点类型的问题。
public int compare(String str1, String str2) {
    String remove = "[\\.:',]"; // change this to all to characters to remoce
    return str1.replaceAll(remove, "").compareToIgnoreCase(object2.replaceAll(remove, ""));
};