小编Gon*_*nan的帖子

用Java排序阿拉伯语单词

我有一份阿拉伯语单词列表,我想对其进行排序.我尝试过使用不同语言环境的标准Collat​​or(如英语或法语但没有太多希望),我甚至创建了自己的RuleBasedCollat​​or但无济于事.显然,默认排序依赖于unicode值顺序,这在许多情况下有效,但显然不在此单独.

遵循javadocs的说明,RuleBasedCollat​​or需要一个字符串,按照您希望它们排序的顺序指定字符.我使用此表中的unicode代码创建了以下字符串:

String arabicLetters = "< \u0623=\uFE83=\uFE84 < \u0628=\uFE8F=\uFE90=\uFE92=\uFE91 < \u062A=\uFE95=\uFE96=\uFE98=\uFE97 < \u062B=\uFE99=\uFE9A=\uFE9C=\uFE9B < \u062C=\uFE9D=\uFE9E=\uFEA0=\uFE9F < \u062D=\uFEA1=\uFEA2=\uFEA4=\uFEA3 < \u062E=\uFEA5=\uFEA6=\uFEA8=\uFEA7 < \u062F=\uFEA9=\uFEAA < \u0630=\uFEAB=\uFEAC < \u0631=\uFEAD=\uFEAE < \u0632=\uFEAF=\uFEB0 < \u0633=\uFEB1=\uFEB2=\uFEB4=\uFEB3 < \u0634=\uFEB5=\uFEB6=\uFEB8=\uFEB7 < \u0635=\uFEB9=\uFEBA=\uFEBC=\uFEBB < \u0636=\uFEBD=\uFEBE=\uFEC0=\uFEBF < \u0637=\uFEC1=\uFEC2=\uFEC4=\uFEC3 < \u0638=\uFEC5=\uFEC6=\uFEC8=\uFEC7 < \u0639=\uFEC9=\uFECA=\uFECC=\uFECB < \u063A=\uFECD=\uFECE=\uFED0=\uFECF < \u0641=\uFED1=\uFED2=\uFED4=\uFED3 < \u0642=\uFED5=\uFED6=\uFED8=\uFED7 < \u0643=\uFED9=\uFEDA=\uFEDC=\uFEDB < \u0644=\uFEDD=\uFEDE=\uFED0=\uFEDF < \u0645=\uFEE1=\uFEE2=\uFEE4=\uFEE3 < \u0646=\uFEE5=\uFEE6=\uFEE8=\uFEE7 < \u0647=\uFEE9=\uFEEA=\uFEEC=\uFEEB < \u0648=\uFEED=\uFEEE < \u064A=\uFEF1=\uFEF2=\uFEF4=\uFEF3 < \u0622=\uFE81=\uFE82 < \u0629=\uFE93=\uFE94 < \u0649=\uFEEF=\uFEF0 < \u0627";
Run Code Online (Sandbox Code Playgroud)

阿拉伯字母可以采用四种形式,具体取决于它们在单词中的位置.因此,我在上面的规则字符串中所做的是使每个字母的所有4种形式相等.然后我指出用'<'分隔它们的字母的顺序.我想这是正确的方法.

现在,如果我有一个星期几的集合(在这种情况下按星期几排序,而不是'按字母顺序'):

???????, ?????????, ??????????, ??????????, ???????, ???????,???????
Run Code Online (Sandbox Code Playgroud)

我得到的结果根本没有排序: …

java sorting collation arabic

11
推荐指数
1
解决办法
1931
查看次数

如何通过依赖注入使用主构造函数?

我一直在阅读 c#12 中主要构造函数的介绍指南,并且得到了一些意想不到的结果(https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/primary-constructors)。

我有一些代码,例如:

public class ServiceA(IServiceB service)
{
    public async Task<bool> Method() {
        return await service.GetValue();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我创建一个像这样的单元测试:

[Fact]
public void Test1() {
    var mockB = Substitute.For<IServiceB>();
    _sut = new SeviceA(mockB);
    _sut.Method();
    Assert.NotNull(mockB);
}
Run Code Online (Sandbox Code Playgroud)

在对测试_sut.Method();service通过模拟提供的 的调用中,它实际上null位于 ServiceA.Method 中。模拟在单元测试中正确创建,但它没有进入方法。

我发现解决此问题的一种方法是创建一个属性或字段来捕获主构造函数参数,然后使用它而不是参数。像这样的东西:

public class ServiceA(IServiceB service)
{
    private IServiceB ServiceProperty { get; } = service; //capture the parameter
    public async Task<bool> Method() {
        return await ServiceProperty.GetValue(); //use property instead of parameter
    }
} …
Run Code Online (Sandbox Code Playgroud)

.net c#

8
推荐指数
1
解决办法
1090
查看次数

lambdaj在Android上的任何调用都失败了java.lang.ExceptionInInitializerError

我正在尝试在Android上使用lambdaj,但是每次调用我都会得到异常(java.lang.ExceptionInInitializerError).

填充集合的类是:

@DatabaseTable(tableName = "sections")
public class Section {

    @DatabaseField(id = true, unique = true)
    private int id;

    @DatabaseField(canBeNull = false)
    private String name;

    public Section() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

ORMLite使用注释.我离开了他们,以防他们以某种方式相关.我怀疑它.

现在,如果我尝试做一个简单的调用,它会崩溃:

List<Section> sections = fillSections(); //this is correctly filled
select(sections, having(on(Section.class).getId(), Matchers.greaterThan(1)))
Run Code Online (Sandbox Code Playgroud)

logcat的:

 FATAL EXCEPTION: main
 java.lang.ExceptionInInitializerError
    at …
Run Code Online (Sandbox Code Playgroud)

android lambdaj

2
推荐指数
1
解决办法
617
查看次数

标签 统计

.net ×1

android ×1

arabic ×1

c# ×1

collation ×1

java ×1

lambdaj ×1

sorting ×1