最近,有个朋友去面试时让一道笔试题给难住了,具体的代码要求当时写出来,考的是非常基础的东西,但是个人感觉这道题非常有意思,话不多说上题目:要求对一串没有任何规律的字符串,例如aassgtgfaagsds,对这个字符串首先进行去重,求出去重后的字符串,其实对原始字符串进行字符统计,统计出每一个字符在这个字符串中出现的次数,最后是将去重后的字符串进行排序,这个题目猛一看貌似很简单,但是最后来了一条要求,就是说只能使用for循环和赋值的方法,任何别的方法都不让用,这个就是考验for循环的逻辑能力了,在这里分享一下自己实现的过程:
public class TestString {
public static void main(String[] args) {
String str = "aassgtgfaagsds";
String strs = getChars(str);
System.out.println("去掉重复后的字符为" + strs);
String soryByfor = soryByfor(strs);
System.out.println("排序后的字符为:"+soryByfor);
String num = getNum(str);
System.out.println(num);
}
/**
* 对字符串进行倒序排序
*/
static String soryByfor(String str) {
char[] arr = new char[50];
String strs = "";
for (int i = 0; i < str.length(); i++) {
arr[i] = str.charAt(i);
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] >= arr[j+1]) {
char temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
for (int x = 0;x<arr.length;x++){
strs+=arr[x];
}
return strs.trim();
}
/**
* 计算字符串中每个字符出现的次数 通过循环和赋值
*/
static String getNum(String str) {
char[] exitsChar = {};
String string = "";
for (int i = 0; i < str.length(); i++) {
//判断是否被计算过的标识
boolean flag = false;
int count = 0;
if (!ifExits(exitsChar, str.charAt(i))) {
for (int j = 0; j < str.length(); j++) {
if (str.charAt(i) == str.charAt(j)) {
count++;
}
}
//将每一次计算后的字符存入数组中
exitsChar = saveToArr(exitsChar, str.charAt(i));
string += str.charAt(i) + "->" + count + " ";
}
}
return string;
}
/**
* 通过循环和赋值去掉字符串中的重复字符
*
* @param str
* @return
*/
private static String getChars(String str) {
char[] chars = {};
String strs = "";
for (int i = 0; i < str.length(); i++) {
char x = str.charAt(i);
for (int j = 0; j < str.length(); j++) {
char y = str.charAt(j);
if (x != y) {
if (!ifExits(chars, x)) {
chars = saveToArr(chars, x);
}
}
}
}
for (char aChar : chars) {
strs += aChar;
}
return strs;
}
public
/**
* 判断一个字符是否存在于一个数组中
*/
static boolean ifExits(char[] arr, char s) {
boolean flag = false;
for (char c : arr) {
if (c == s) {
flag = true;
}
}
return flag;
}
/**
* 将一个字符保存到数组中
*
* @param arr
* @param s
* @return
*/
static char[] saveToArr(char[] arr, char s) {
char[] saveArr = new char[arr.length + 1];
for (int i = 0; i < arr.length; i++) {
saveArr[i] = arr[i];
}
if (arr.length + 1 == 1) {
saveArr[0] = s;
} else {
saveArr[arr.length] = s;
}
return saveArr;
}
}
程序运行后的结果如下:
中间最重要的方法就是向一个字符数组中插入一个新的字符,并且返回一个新的字符数组,另外一个就是判断字符是否存在于一个字符串中,这两个最为基本的方法为之后的方法提供了很多便利。