Java 我想得到组成字符串的字符。例如,如果我有str=aabbc,那么答案是abc

Java 我想得到组成字符串的字符。例如,如果我有str=aabbc,那么答案是abc,java,vector,Java,Vector,这是我写的函数。它获取一个Stringbuffer文本,然后分配v[0]=text[0],然后从text[1]>>text[n-1]开始比较。向量v应包含字符。我不知道问题出在哪里。你能帮我吗 public void setdirectory(StringBuffer text) { String temp; boolean t; v.add(0,String.valueOf(text.charAt(0))); //A[0]=first

这是我写的函数。它获取一个Stringbuffer文本,然后分配
v[0]=text[0]
,然后从
text[1]>>text[n-1]
开始比较。向量
v
应包含字符。我不知道问题出在哪里。你能帮我吗

   public void setdirectory(StringBuffer text)
   {   
       String temp;
       boolean t;
       v.add(0,String.valueOf(text.charAt(0))); //A[0]=first letter in text.

       for(int i=1;i<text.length();++i)
       {
           temp=String.valueOf(text.charAt(i));
           try{

        for(int j=0;j<v.capacity();++j)
           {

               if(!temp.equals(v.elementAt(j)))
               {

                    v.add(i,temp);

               }



                 v.trimToSize();

           }



           //   System.out.println(v.capacity());


       }catch(ArrayIndexOutOfBoundsException e)   
       {
           System.out.println("usage error");
       }

       }
       }
public void setdirectory(StringBuffer文本)
{   
字符串温度;
布尔t;
v、 添加(0,String.valueOf(text.charAt(0));//A[0]=文本中的第一个字母。

对于(inti=1;i如果您使用的是Java8+,那么使用新的流API可能会更简单

String str = "aabbc";
StringBuilder sb = new StringBuilder(str.length());
str.chars().distinct().forEach(c -> sb.append((char)c));
System.out.println(sb.toString());
哪张照片

abc

我会编写一个函数来获取唯一的字符,并且假设您需要保留插入顺序,我会使用一个,我更喜欢
StringBuilder
,而不是
StringBuffer

static String getUniqueCharacters(String text) {
    Set<Character> set = new LinkedHashSet<>();
    for (char ch : text.toCharArray()) {
        set.add(ch);
    }
    StringBuilder sb = new StringBuilder();
    for (char ch : set) {
        sb.append(ch);
    }
    return sb.toString();
}
静态字符串getUniqueCharacters(字符串文本){
Set Set=newlinkedhashset();
for(char ch:text.toCharArray()){
集合。添加(ch);
}
StringBuilder sb=新的StringBuilder();
for(字符通道:集合){
某人附加(ch);
}
使某人返回字符串();
}

您需要跟踪在向量中添加值的位置。此外,向量中的对象数是size(),而不是capacity()(在API中查找两者;capacity()显示当前已填充和可填充的“空格”数,在向量需要展开之前,它不显示实际已填充的空间数)

Doh,代码不起作用的第三个原因是:每次在向量中发现不匹配的字符时,您都在添加字符(每次都重写自身,因此您只能看到最后一次添加)

public void setdirectory(StringBuffer text){
字符串温度;
布尔t;
int addAt=0;
v、 add(addAt,String.valueOf(text.charAt(0));//A[0]=文本中的第一个字母。

对于(int i=1;i而言,另一种Java 8解决方案是:

String str = "aabbc";
String str2 = str.chars().distinct().mapToObj(j->""+(char)j).collect(Collectors.joining());
System.out.println(str2);

在幕后,这与这里的其他答案类似,因为
IntStream::distinct
是使用
LinkedHashSet
实现的,而
join
使用
StringBuilder

String
分解为
char
数组,将所有元素添加到某种
Set
中,获取每个独立的元素al
char
返回并重新组合
字符串
@KickButtowski是的,它把我拖上来,发出尖叫;)
String str = "aabbc";
String str2 = str.chars().distinct().mapToObj(j->""+(char)j).collect(Collectors.joining());
System.out.println(str2);