Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Algorithm_Sorting_Unicode - Fatal编程技术网

Java 为字符串指定词汇顺序分数

Java 为字符串指定词汇顺序分数,java,string,algorithm,sorting,unicode,Java,String,Algorithm,Sorting,Unicode,在我目前的项目中,我们有一种奇怪的排序系统 与通常通过相互比较来确定元素顺序的方法不同,我们首先为每个元素分配一个数字分数,然后根据该分数进行排序。通过这种方式,我们可以通过更改分数分配部分按不同的标准进行排序 我想在字符串上定义一个函数,这样;f(a)

在我目前的项目中,我们有一种奇怪的排序系统

与通常通过相互比较来确定元素顺序的方法不同,我们首先为每个元素分配一个数字分数,然后根据该分数进行排序。通过这种方式,我们可以通过更改分数分配部分按不同的标准进行排序

我想在字符串上定义一个函数,这样;f(a) 字符串是unicode,我们应该支持大小写不敏感


这可能吗?

不要误解我的意思,但这种方法没有意义。因为这意味着您可以而不是使用Java的“默认”机制来解决您的问题;那就是:你创造自己的习惯

含义:在对某个类的对象集合/数组进行排序时,定义其顺序的合理方法是提供一个比较器,该比较器可以告诉该类的任意两个对象如何对它们进行排序

考虑到您的设置,这可能意味着:您的比较器需要能够从提供的输入对象计算该分数。然后,它可以使用进一步的信息(如字符串值)做出进一步的决策


再想一想:你真的应该退一步。如果你有一个巨大的代码库已经在使用这个奇怪的系统;然后,您需要定义一个评分函数,将字符串减少为数字;并确保分数值与您要查找的f(a)请不要误会,但这种方法没有意义。因为这意味着您可以而不是使用Java的“默认”机制来解决您的问题;那就是:你创造自己的习惯

含义:在对某个类的对象集合/数组进行排序时,定义其顺序的合理方法是提供一个比较器,该比较器可以告诉该类的任意两个对象如何对它们进行排序

考虑到您的设置,这可能意味着:您的比较器需要能够从提供的输入对象计算该分数。然后,它可以使用进一步的信息(如字符串值)做出进一步的决策


再想一想:你真的应该退一步。如果你有一个巨大的代码库已经在使用这个奇怪的系统;然后,您需要定义一个评分函数,将字符串减少为数字;并确保分数值与您要查找的f(a)您需要实现自定义比较器。像这样的-

import java.util.Comparator;

public class myString {
    private String s;   
    private int score;
    // getter & setter
    // ...
}


public class ScoredStringComparator implements Comparator<myString>
{
    @Override
    public int compare(myString x, myString y)
    {
        // Assume neither string is null.
        if (x.getScore() < y.getScore())
        {
            return -1;
        }
        if (x.getScore() > y.getScore())
        {
            return 1;
        }
        return 0;
    }
}

您需要实现自定义比较器。像这样的-

import java.util.Comparator;

public class myString {
    private String s;   
    private int score;
    // getter & setter
    // ...
}


public class ScoredStringComparator implements Comparator<myString>
{
    @Override
    public int compare(myString x, myString y)
    {
        // Assume neither string is null.
        if (x.getScore() < y.getScore())
        {
            return -1;
        }
        if (x.getScore() > y.getScore())
        {
            return 1;
        }
        return 0;
    }
}
我想在字符串上定义一个函数,这样;f(a) 这可能吗

不,除非字符串长度有限,否则不会。假设f(“a”)=1。显然,f(“aa”)>=2。继续此模式,f(“aa…a”)>=n表示包含n个符号的“aa…a”。因为对于任何这样的字符串f(“aa…a”) 请注意,如果您使用
BigDecimal
作为函数的值而不是整数类型,那么有一种方法(尽管使用Unicode可能有点棘手,基本思想是不规范化字符串并将其逐字节转换为十进制数字)

我想在字符串上定义一个函数,这样;f(a) 这可能吗

不,除非字符串长度有限,否则不会。假设f(“a”)=1。显然,f(“aa”)>=2。继续此模式,f(“aa…a”)>=n表示包含n个符号的“aa…a”。因为对于任何这样的字符串f(“aa…a”)
请注意,如果您使用
BigDecimal
作为函数的值而不是整数类型,有一种方法(尽管使用Unicode可能有点棘手,基本思想是不规范字符串并将其逐字节转换为十进制数字)。

请注意:我的答案可能有点通用;但你的问题也是如此。用于优化反馈;考虑添加A,这样我们就可以更好地理解这些分值排序和字符串排序是如何一起工作的。因为Unicode只是一个21位字符集,只需将字符串编码为所有21位代码点,其中第一个字符从最高位和最低位开始。您必须使用
大整数
。还有,我是克雷·克雷。关于a.toLowerCase().compareTo(b.toLowerCase())?@DavidConrad我不熟悉“克雷·克雷”这个词。这是什么意思?@GhostCat俚语,意为疯狂。请记住:我的答案可能有点笼统;但你的问题也是如此。用于优化反馈;考虑添加A,这样我们就可以更好地理解这些分值排序和字符串排序是如何一起工作的。因为Unicode只是一个21位字符集,只需将字符串编码为所有21位代码点,其中第一个字符从最高位和最低位开始。您必须使用
大整数
。还有,我是克雷·克雷。关于a.toLowerCase().compareTo(b.toLowerCase())?@DavidConrad我不熟悉“克雷·克雷”这个词。那是什么意思?@GhostCat Sl
stringSet.remove(aString);
aString.setScore(newScore);
stringSet.add(aString);