Java 根据其自然顺序获取下一个字符串

Java 根据其自然顺序获取下一个字符串,java,string,Java,String,在Java中,类字符串实现Comparable,这意味着字符串对象有一个总的顺序。这种排序称为类的自然排序,而类的compareTo方法称为其自然比较方法。字符串对象集在数学意义上也是可数的 我需要一个函数,它接受一个字符串并根据字符串的自然顺序返回下一个字符串 对于有数学倾向的人来说 function(X) = Y, where Y is such that: 1) X < Y 2) for all Z, if

在Java中,类字符串实现Comparable,这意味着字符串对象有一个总的顺序。这种排序称为类的自然排序,而类的
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);