Java 根据其自然顺序获取下一个字符串
在Java中,类字符串实现Comparable,这意味着字符串对象有一个总的顺序。这种排序称为类的自然排序,而类的Java 根据其自然顺序获取下一个字符串,java,string,Java,String,在Java中,类字符串实现Comparable,这意味着字符串对象有一个总的顺序。这种排序称为类的自然排序,而类的compareTo方法称为其自然比较方法。字符串对象集在数学意义上也是可数的 我需要一个函数,它接受一个字符串并根据字符串的自然顺序返回下一个字符串 对于有数学倾向的人来说 function(X) = Y, where Y is such that: 1) X < Y 2) for all Z, if
compareTo
方法称为其自然比较方法。字符串对象集在数学意义上也是可数的
我需要一个函数,它接受一个字符串并根据字符串的自然顺序返回下一个字符串
对于有数学倾向的人来说
function(X) = Y, where Y is such that: 1) X < Y
2) for all Z, if X < Z, then Y <= Z.
函数(X)=Y,其中Y为:1)X
String successor(String s) {
return s + '0';
}
因为“0”具有所有合法字符中最小的unicode值
String successor(String s) {
return s + '\0';
}
你为什么会需要这个是任何人的猜测,不过。。。可能有一个不太老套的解决方案。不确定为什么需要这样的解决方案。。。残忍地做什么?
无论如何,这里有一个非常原始的解决方案:
public static String getNextString(String input)
{
if(input == null || input.trim().length() < 1)
{
return("0");
}
else
{
String trimmed = input.trim();
int lastPos = input.length()-1;
int last = (int) input.charAt(lastPos);
last++;
if(last > (int) 'z')
{
if(lastPos == 0)
{
return "00";
}
else
{
return getNextString(trimmed.substring(0,lastPos-1)) + "0";
}
}
}
}
公共静态字符串getNextString(字符串输入)
{
if(input==null | | input.trim().length()<1)
{
回报(“0”);
}
其他的
{
String trim=input.trim();
int lastPos=input.length()-1;
int last=(int)input.charAt(lastPos);
last++;
如果(最后一个>(int)'z')
{
如果(lastPos==0)
{
返回“00”;
}
其他的
{
返回getNextString(trimmed.substring(0,lastPos-1))+“0”;
}
}
}
}
显然,可能会有错误,因为我在回家的路上用手机打了这个…正如另一个答案首先指出的,字符串的后继字符是紧跟其后的字符,其值是0
(在Java中,char
是一个无符号整数值,[065535]
)
以下摘自文档的内容规定了字符串
的确切用法,并给出了使用类似后续方法的动机:
注意:有几种方法返回范围受限的子集。这些范围是半开放的,也就是说,它们包括其低端,但不包括其高端(如适用)。如果您需要一个闭合范围(包括两个端点),并且元素类型允许计算给定值的后续值,只需请求从lowEndpoint
到successive(highEndpoint)
的子范围。例如,假设s
是一组已排序的字符串。以下习惯用法获取一个视图,其中包含s
中从low
到high
的所有字符串,包括:
SortedSet<String> sub = s.subSet(low, high+"\0");
请注意,尽管如此,这个习惯用法仍然难以使用,并且可能并不总是很容易计算任何泛型类型的后继类型(例如,如果它只是一个SortedSet
)。一个更加完善的API是,扩展SortedSet
,并定义这些范围操作,以允许使用布尔
标志的打开或关闭端点的任意组合
相关问题
你的自然顺序是“A”<“AA”<“AB”?@gawi:
这不是我的自然顺序;字符串实现可比较:。。。这是词典。那么我相信梅里顿的答案是正确的。“测试”<“测试”,但“测试”<“测试”,所以这不是解决方案。@gawi:
这不是家庭作业,只是一个黑客。我有一个二进制搜索,返回第一条记录的索引;与其写一个返回最后一条记录的索引,我只想找到下一个字符串的第一条记录。“Tesz”。compareTo(“TestA”)返回6,所以“Tesz”>“TestA”。
SortedSet<String> sub = s.subSet(low, high+"\0");
SortedSet<String> sub = s.subSet(low+"\0", high);