如何使用Lucene TestUtil进行随机Unicode字符串生成
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Lucene TestUtil进行随机Unicode字符串生成相关的知识,希望对你有一定的参考价值。
我正在研究一些用于生成随机Unicode字符串的代码。我尝试使用Lucene Test Utils我的代码生成随机Unicode字符串如下
for (int i = 0; i < 5000; i++) {
Random random = new Random();
final String s = TestUtil.randomUnicodeString(random, 12);
//final String s = TestUtil.randomUnicodeString(random);Tried both
final byte[] utf8 = new byte[s.length() * UnicodeUtil.MAX_UTF8_BYTES_PER_CHAR];
final int utf8Len = UnicodeUtil.UTF16toUTF8(s, 0, s.length(), utf8);
if(utf8Len !=8)
{
System.out.println("$$$$");
}
}
所以我检查了Lucene版本6.2.0的lucene代码中随机Unicode字符串的实现
public static String randomUnicodeString(Random r, int maxLength) {
final int end = nextInt(r, 0, maxLength);
if (end == 0) {
// allow 0 length
return "";
}
final char[] buffer = new char[end];
randomFixedLengthUnicodeString(r, buffer, 0, buffer.length);
return new String(buffer, 0, end);
}
以及randomFixedLengthUnicodeString的后续代码是
public static void randomFixedLengthUnicodeString(Random random, char[] chars, int offset, int length) {
int i = offset;
final int end = offset + length;
while(i < end) {
final int t = random.nextInt(5);
if (0 == t && i < length - 1) {
// Make a surrogate pair
// High surrogate
chars[i++] = (char) nextInt(random, 0xd800, 0xdbff);
// Low surrogate
chars[i++] = (char) nextInt(random, 0xdc00, 0xdfff);
} else if (t <= 1) {
chars[i++] = (char) random.nextInt(0x80);
} else if (2 == t) {
chars[i++] = (char) nextInt(random, 0x80, 0x7ff);
} else if (3 == t) {
chars[i++] = (char) nextInt(random, 0x800, 0xd7ff);
} else if (4 == t) {
chars[i++] = (char) nextInt(random, 0xe000, 0xffff);
}
}
}
所以我得到的例外可能是什么原因
Exception in thread "main" java.lang.NoClassDefFoundError: com/carrotsearch/randomizedtesting/generators/RandomInts
at org.apache.lucene.util.TestUtil.nextInt(TestUtil.java:433)
at org.apache.lucene.util.TestUtil.randomUnicodeString(TestUtil.java:505)
at luceneLab.lab.main(lab.java:33)Caused by: java.lang.ClassNotFoundException: com.carrotsearch.randomizedtesting.generators.RandomInts
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 3 more
我传递错误的参数为方法生成随机字符串或我缺少一些相互依赖性?提前致谢。
答案
正如Exception所说,您在项目中缺少com / carrotsearch / randomizedtesting / generators / RandomInts。看起来TestUtil使用com.carrotsearch.randomizedtesting,因此您需要将其添加为项目的依赖项。
以上是关于如何使用Lucene TestUtil进行随机Unicode字符串生成的主要内容,如果未能解决你的问题,请参考以下文章
lucene中TOKENIZED,UN_TOKENIZED 解釋
MyEclipse配置tomcat报错 - java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Un
如何使用 Stratio Cassandra Lucene Index 进行小写前缀过滤