我有一个由用户(arrayInput[]
)填充的char数组,其中包含一些字符,如{b,d,a,b,f,a,g,a,a,f},我需要创建一个方法,该方法返回一个只有第一次出现的字符的新char数组,但是按输入顺序。这本书还说"解决这个问题的方法是创建一个布尔数组来跟踪要保留的字符!",但是我无法想象布尔数组应该如何与其他阵列。
主要的问题是,如果arrayInput
包含特定字符,甚至多少次,我可以保存在布尔数组中,但只创建一个非常长的分支if-else到for,如
if ((arrayOutput[i] == 'A') && (arrayControl[0] = false)) {
arrayControl[0] = true; }
其中arrayOutput
是我想从方法返回的数组,arrayControl[0]
是' A'的值。在我的布尔数组中,我创建了方法。 A = 0,B = 1,... Z = 25,a = 26,b = 27,... 51 = z。对于每个单个字符,大写和小写,我在数组中创建了一个位置,所以我可以检查所有内容,但现在我无法再进一步了。我不知道如何保存arrayOutput
上的字符,如何检查字符是否已经在arrayOutput
上,如果已经存在,则数组会传递该特定字符,去下一个。
另外请记住我是新手,所以我对Java知之甚少。请尽你所能解释自己。提前致谢!
答案 0 :(得分:1)
public static void main(String[] args) {
Main main = new Main();
char[] array = {'e','a','b','a','c','d','b','d','c','e'};
main.getCharArray(array);
}
private char[] getCharArray(char[] array) {
String _array = "";
for(int i = 0; i < array.length; i++) {
if(_array.indexOf(array[i]) == -1) // check if a char already exist, if not exist then return -1
_array = _array+array[i]; // add new char
}
return _array.toCharArray();
}
EABCD
答案 1 :(得分:0)
boolean arr[26]; //considering only small letters arrive. otherwise take a larger array.
for( i=0;i<str.length;i++ )
arr[str[i]-'a']=true;
循环后的最后一个是真实的字符。 (所有重复的人都是。)
考虑到这些职位,
int arr[26];
//initialize all the array elemnts to 0
for( i=0;i<str.length();i++ )
if(i>=arr[str[i]-'a'])
arr[str[i]-'a']=i+1;
//大于0的那些是非重复字符。他们首次出现的情况=(arr [i] -1)
编辑:我差不多一年前使用过java。算法正确显示。对不起我笨拙的java代码。答案 2 :(得分:0)
这可能会有所帮助。创建一个单独的数组并仅存储非重复的字符。
char[] removeDuplicates (char[] arrayInput) {
boolean exists[]=new boolean[26];
char arrayOutput[] = new char[26];
int ctr=0;
for(int i=0; i<26; i++) {
exists[i] = false;
}
for(int i=0; i<arrayInput.length; i++) {
if(!exists[arrayInput[i]-97]) {
exists[arrayInput[i]-97]=true;
arrayOutput[ctr++]=arrayInput[i];
}
}
return Arrays.copyOfRange(arrayOutput, 0, ctr);
}
答案 3 :(得分:0)
如果您考虑使用收集框架,那么它会更容易。您的char
数组arrayInput
为char
。现在将每个HashSet
放到HashSet<Character> uniqueCharSet = new HashSet<Character>();
for(char each : arrayInput){
uniqueCharSet.add(each);
}
这样的地方 -
HashSet
现在uniqueCharSet
char
将仅包含arrayInput
数组uniqueCharSet
中的唯一字符。请注意,Character
中的所有元素都是包装类型 - HashSet
。
您可以将uniqueCharSet
Character
转换为Object[] uniqueCharArray = uniqueCharSet.toArray();
这样的数组 -
for(Object each : uniqueCharArray){
Character c = (Character) each;
System.out.println(c);
}
然后你可以像这样使用它们 -
@Entity
@Table(name = "PROFOLDERSYS_JOIN")
public class ProjectFileSystem implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int foldersysid;
private int proclassid;
private int projectid;
private String projectName;
private String folderName;
public ProjectFileSystem() {
}
public ProjectFileSystem(int proclassid, int projectid,
String projectName, String folderName) {
this.proclassid = proclassid;
this.projectid = projectid;
this.projectName = projectName;
this.folderName = folderName;
}
// getters and setters
}
答案 4 :(得分:0)
这是实现您所需的方法:
public static void main(String[] args) {
char[] arr= {'A','B','C','A','B'};
HashSet<Character> hset=new HashSet<Character>();
for(int i=0;i<arr.length;i++) {
hset.add(arr[i]);
}
Object[] ObjChar=hset.toArray();
char[] resultArr = new char[ObjChar.length];
for(int j=0;j<ObjChar.length;j++) {
resultArr[j]=(char) ObjChar[j];
}
for(char eachChar: resultArr) {
System.out.println(eachChar);
}
}