package 附加题;
import java.util.ArrayList;
import java.util.LinkedHashSet;
/*
* 找到不重复字母在 一个字符串 第一次出现的索引 .
* 比如 不重复字母在 "gooogle" 第一次出现的索引为l字母的索引5
*
* iljafakszxhfdaljdlasjdlisajfl
* LinkedHashSet : 有序的set集合.
*/
public class Test2_important_不重复_第一次出现____以及LinkedHashSet {
public static void main(String[] args) {
fun1();
fun2();
fun3();
}// main
public static void fun3() {
System.out.println("==========方式3(也不错哈哈)==========");
String str1 = "iljafakszxhfdaljdlasjdlisajfl";
LinkedHashSet<Character> once = new LinkedHashSet<>();
LinkedHashSet<Character> chongFu = new LinkedHashSet<>();
ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < str1.length(); i++) {
boolean add = once.add(str1.charAt(i)); // 得到集合里所有出现过一次的元素
if (!add) {
chongFu.add(str1.charAt(i));// 得到集合里重复出现的元素
}
}
boolean removeAll = once.removeAll(chongFu); // once里将存储所有不重复的元素
list.addAll(once);
System.out.println("所有不重复的字母:" + list);
for (int i = 0; i < str1.length(); i++) {
if (list.get(0) == str1.charAt(i)) {
System.out.println("它的索引为:" + i);
}
}
}
public static void fun2() {
System.out.println("======方式2(也凑合 嘻嘻)==========");
ArrayList<Character> list = new ArrayList<>();
String str1 = "iljafakszxhfdaljdlasjdlisajfl";
for (int i = 0; i < str1.length(); i++) {
int flag = -1;// 定义一个标志
for (int j = 0; j < str1.length(); j++) {
if (i == j) {// 如果是同一个元素跳过本次循环,继续下次循环
continue;
}
// 如果这个元素不是第一次出现,将标志改变
if (str1.charAt(i) == str1.charAt(j)) {
flag = 1;
}
}
// 未改变标志的元素,即只出现一次的元素
if (flag == -1) {
list.add(str1.charAt(i));
} // if
} // for
System.out.println("所有不重复的字母:" + list);
System.out.println("第一个不重复的字母为:" + list.get(0));
for (int i = 0; i < str1.length(); i++) {
if (list.get(0) == str1.charAt(i)) {
System.out.println("它的索引为:" + i);
}
}
}
private static void fun1() {
System.out.println("===========方式1(挺巧妙)=============");
String s = "iljafakszxhfdaljdlasjdlisajfl";
for (int i = 0; i < s.length(); i++) {
char charAt = s.charAt(i);
// 找出取出的元素第一次出现的位置
int indexOf = s.indexOf(charAt);
// 找出取出的元素最后一次出现的位置
int lastIndexOf = s.lastIndexOf(charAt);
// 如果是唯一的元素,第一次出现的位置和最后一次出现的位置应该相同
// 如果相同了就没必要在继续走for循环了
if (indexOf == lastIndexOf) {
System.out.println(s.charAt(indexOf));
System.out.println(indexOf);
return;
}
}
}
}
找到不重复字母在一个字符串第一次出现的索引 三种方法
最新推荐文章于 2022-09-24 19:01:04 发布