从字符串中获取不同的字符
Getting distinct characters from a string
我知道现在有更简单的方法来解决这个问题陈述。但这是我尝试过但无法调试的东西。
这是我的代码。
String str="java is a programming language";
int flag=0,k=0;
char unique[]=new char[256];
for(int i=0;i<str.length();i++){
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
flag++;
}
System.out.println(flag); //printing flag values
if(flag==0){
unique[k]=str.charAt(i);
System.out.println(unique[k]); //printing array values
k++;
}
}
这是我的输出。
Enter the sentence:
java is a programming language
0
j
5
5
9
12
13
13
15
18
19
19
20
20
23
23
25
26
26
26
27
29
29
29
30
30
31
31
31
31
31
Unique characters:
j
我想了解这些数值是从哪里打印出来的。我确信打印标志值和数组值会给我个位数。这些两位数是多少?
您只需重置计数器(标志),然后再在下一次迭代中添加它。
flag=0;
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
flag++;
}
您的代码存在以下问题:
- 不重置
flag
的值。
- 为
i
的每个值打印 flag
而您只想在找到唯一字符时打印它。
- 您正在从
i + 1
开始循环 j
,这样,您将无法比较索引 i + 1
. 之前的字符
您可能还想做的一些其他事情是:
- 仅过滤非空白字符。
- 仅打印数组到
k
的值。
- 未将
unique[]
的大小固定为 256
。如果 str
中的所有字符都是唯一的,则 unique[]
所需的大小将等于 str
的长度。因此,unique[]
的最大要求大小等于 str.length()
。但是,如果大小需要动态,最好使用 List
。
按如下方式存储和打印唯一字符:
public class Main {
public static void main(String[] args) {
String str = "java is a programming language";
int flag, k = 0;
char unique[] = new char[str.length()];// This array can have a maximum length equal to the length of str
for (int i = 0; i < str.length(); i++) {
flag = 0;
for (int j = 0; j < str.length(); j++) {
if (i != j && str.charAt(i) == str.charAt(j)) {
flag++;
}
}
if (flag == 0 && !String.valueOf(str.charAt(i)).isBlank()) {
unique[k] = str.charAt(i);
k++;
}
}
System.out.print("Unique characters: ");
for (int i = 0; i <= k; i++) {
System.out.print(unique[i] + (i < k - 1 ? "," : "\n"));
}
}
}
输出:
Unique characters: j,v,s,p,o,l,u,e
String str="java is a programming language";
int flag=0,k=0;
char unique[]=new char[256];
for(int i=0;i<str.length();i++){
flag = 0;
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
flag++;
}
System.out.println(flag); //printing flag values
if(flag==0){
unique[k]=str.charAt(i);
System.out.println(unique[k]); //printing array values
k++;
}
}
我知道现在有更简单的方法来解决这个问题陈述。但这是我尝试过但无法调试的东西。
这是我的代码。
String str="java is a programming language";
int flag=0,k=0;
char unique[]=new char[256];
for(int i=0;i<str.length();i++){
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
flag++;
}
System.out.println(flag); //printing flag values
if(flag==0){
unique[k]=str.charAt(i);
System.out.println(unique[k]); //printing array values
k++;
}
}
这是我的输出。
Enter the sentence:
java is a programming language
0
j
5
5
9
12
13
13
15
18
19
19
20
20
23
23
25
26
26
26
27
29
29
29
30
30
31
31
31
31
31
Unique characters:
j
我想了解这些数值是从哪里打印出来的。我确信打印标志值和数组值会给我个位数。这些两位数是多少?
您只需重置计数器(标志),然后再在下一次迭代中添加它。
flag=0;
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
flag++;
}
您的代码存在以下问题:
- 不重置
flag
的值。 - 为
i
的每个值打印flag
而您只想在找到唯一字符时打印它。 - 您正在从
i + 1
开始循环j
,这样,您将无法比较索引i + 1
. 之前的字符
您可能还想做的一些其他事情是:
- 仅过滤非空白字符。
- 仅打印数组到
k
的值。 - 未将
unique[]
的大小固定为256
。如果str
中的所有字符都是唯一的,则unique[]
所需的大小将等于str
的长度。因此,unique[]
的最大要求大小等于str.length()
。但是,如果大小需要动态,最好使用List
。
按如下方式存储和打印唯一字符:
public class Main {
public static void main(String[] args) {
String str = "java is a programming language";
int flag, k = 0;
char unique[] = new char[str.length()];// This array can have a maximum length equal to the length of str
for (int i = 0; i < str.length(); i++) {
flag = 0;
for (int j = 0; j < str.length(); j++) {
if (i != j && str.charAt(i) == str.charAt(j)) {
flag++;
}
}
if (flag == 0 && !String.valueOf(str.charAt(i)).isBlank()) {
unique[k] = str.charAt(i);
k++;
}
}
System.out.print("Unique characters: ");
for (int i = 0; i <= k; i++) {
System.out.print(unique[i] + (i < k - 1 ? "," : "\n"));
}
}
}
输出:
Unique characters: j,v,s,p,o,l,u,e
String str="java is a programming language";
int flag=0,k=0;
char unique[]=new char[256];
for(int i=0;i<str.length();i++){
flag = 0;
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
flag++;
}
System.out.println(flag); //printing flag values
if(flag==0){
unique[k]=str.charAt(i);
System.out.println(unique[k]); //printing array values
k++;
}
}