Java 按字典顺序排列,是字符串中的第k个最小字符

Java 按字典顺序排列,是字符串中的第k个最小字符,java,string,Java,String,我有一个由用户输入的字符串和一个整数k。如何从输入字符串中获取按字典顺序排列的第k个最小字符 这就是我一直在尝试的 static Character find(int K, String s){ SortedSet<Character> ss = new TreeSet<Character>(); for(Character c : s.toCharArray()){ ss.add(c); } Iterator it = s

我有一个由用户输入的字符串和一个整数k。如何从输入字符串中获取按字典顺序排列的第k个最小字符

这就是我一直在尝试的

static Character find(int K, String s){
    SortedSet<Character> ss = new TreeSet<Character>();
    for(Character c : s.toCharArray()){
        ss.add(c);
    }
    Iterator it = ss.iterator();
    int i=0;
      while (it.hasNext()) {
         Object element = it.next();
         if(i==K-1)
             return (Character) element;

      }
      return null;
}
静态字符查找(int K,字符串s){
SortedSet ss=新树集();
for(字符c:s.toCharArray()){
ss.添加(c);
}
迭代器it=ss.Iterator();
int i=0;
while(it.hasNext()){
Object元素=it.next();
如果(i==K-1)
返回(字符)元素;
}
返回null;
}

您的代码是正常的,除了一件事:
i
变量的处理。您应该在
while
循环的末尾增加它,以使其与
K-1
匹配

还有一种对java8更友好的方法:

String str = "hello";
int k = 2;

Optional<Character> kth = 
    Stream.of(str.split(""))
        .map(c -> c.charAt(0))
        .sorted()
        .distinct()
        .skip(k - 1)
        .findFirst();

System.out.println(kth.isPresent() ? kth.get() : "k too big!"); // h
String str=“你好”;
int k=2;
可选kth=
第三流(str.split(“”)
.map(c->c.charAt(0))
.已排序()
.distinct()
.skip(k-1)
.findFirst();
System.out.println(kth.isPresent()?kth.get():“k太大了!”;//H
此代码假定
k
是基于1的,并且在获取第k个字符时不考虑重复字符


此外,正如注释中指出的,您不应该对
迭代器使用原始类型。考虑将其更改为<代码> Iterator <代码>,这样您就不必抛出由<代码> .NeXT()/<代码>返回的值。< /p>在 STR 中,生成所有字符的排序集。剩下的应该是显而易见的。一些代码?还是在找作业?我对这个很陌生。如果有人能帮我实现同样的功能,那就太好了。@g19太好了,欢迎光临!如果您向我们展示一些您尝试过的代码,以及您认为应该如何使其工作,那就更好了……我认为您需要更改的是
if(I==K-1)
if(I++==K-1)