import java.util.Arrays;
为翔安等地区用户提供了全套网页设计制作服务,及翔安网站建设行业解决方案。主营业务为网站设计、成都网站制作、翔安网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
import java.util.Comparator;
public class A {
public static void main(String[] args) {
String[] ls={"A","B","C","V","G","H","K"};
final String[] ses={"B","G","K"};
Arrays.sort(ls, new ComparatorString(){
public int compare(String str1, String str2) {
if(str1.equals(str2)){
return 0;
}
if(str1.equals(ses[0])){
return -1;
}else if(str1.equals(ses[1])){
if(str2.equals(ses[0])){
return 1;
}
return -1;
}else if(str1.equals(ses[2])){
if(str2.equals(ses[0]) || str2.equals(ses[1])){
return 1;
}
return -1;
}else if(str2.equals(ses[0]) || str2.equals(ses[1]) || str2.equals(ses[2])){
return 1;
}
return 0;
}
});
for(String item: ls){
System.out.println(item);
}
}
}
是否可以解决您的问题?
java中的字符串比较方法:
1)string1.equals(string2)
2) str1==str2 。
java中字符串的比较是==比较引用,equals 比较值的做法。但是不同的声明方法字符串的比较结果也是不同的。
例如: String str1=new String("a");
String str2=new String("a");
str1==str2 输出false
str1.equals(str2) 输出true
而如果这样声明
String str1="a";
String str2="a";
str1==str2 输出true
str1.equals(str2) 输出true
这是因为 equals 方法本来也是比较引用的字符串类在实现的时候重写了该方法。
第一种声明方法等于是声明了两个对象,用’==‘比较是时候比较的是引用输出的是false 由于他们的值相同用equals的时候就比较的是值了,输出true。
第二种情况不是因为比较有与第一种有差异,而是因为声明有差异,第二种声明方法在声明的时候有堆或堆栈 共用的现象,也就是说
在声明的时候如果如果声明为类属性他会检查在堆栈中有没有与现在声明的是相同结构的字符串。如果有就直接将地址指向已有内存地址。声明在方法内部的局部变
量原理一样只不过他是堆栈共享。
public class EncodeAndDecode {
/**
* 译码
*
* @param str
* 要译码的字符串
* @return 译码后的字符串
*/
public String encode(String str) throws StringLenException{
StringBuilder sb = new StringBuilder();
if(null == str) {
throw new StringLenException("字符串末初始化!");
}
int n = str.length();
if(n =0) {
throw new StringLenException("字符串不能为空!");
}
char c = 0;
int k = 0;
for (int i = 0; i n; i++) {
// 获得当前字符
c = str.charAt(i);
if (c = '1' c = '9' i != n-1) { // c是1-9的数字, 且in-1 复制(k+1)次后面的一个字符
k = c -'0' + 1;
for(int j=0; jk; j++) {
sb.append(str.charAt(i+1));
}
} else if (c == '_') { // c除1-9,且为”_” 转换为”\Ul”
sb.append("\\UL");
}else{ //其余 复制该字符
sb.append(c);
}
sb.append("_");
}
return sb.deleteCharAt(sb.length()-1).toString();
}
/**
* 解码
*
* @param str
* 要解码的字符串
* @return 解码后的字符串
*/
public String decode(String str) {
StringBuilder sb = new StringBuilder();
if(null == str) {
throw new StringLenException("字符串末初始化!");
}
if(sb.length() =0) {
throw new StringLenException("字符串不能为空!");
}
String strs[] = str.split("_");
char c = 0;
int k = 0;
int n = strs.length;
if(n == 1) {
sb.append(str);
} else {
for(int i=0; in; i++) {
k = strs[i].length();
c = strs[i].charAt(0);
if(1 ==k) { //k==1, 将该字符原样复原
sb.append(c);
} else { //k1,
if(strs[i].equals("\\UL")) {//strs[i] == ”\Ul”, 转换为”_”
sb.append("_");
} else { // strs[i] != ”\Ul”, 转换为k(k = strs[i].length()-1)
sb.append(k-1);
}
}
}
}
return sb.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
String s = "24ab_2t2";
// String s = "04ab_2t2";
// String s = "1a0b_2t2";
// String s = "aaab_2t2";
// String s = "24ab_2335t2";
// String s = "240ab_";
/*EncodeAndDecode encode = new EncodeAndDecode();
String s1 = encode.encode(s);
System.out.println("encode:" + s1);
String s2 = encode.decode(s1);
System.out.println("decode:" + s2);
*/
}
}
public class StringLenException extends RuntimeException {
public StringLenException() {
super();
}
public StringLenException(String message) {
super(message);
}
}
输出BCDA
字符串长度为1时输出的是第一个字符
长度超过1时则把第一位放到最后一位。
另代码不严谨,当s=“”时会报错的。因为s的长度等于0,不是1,但是s.substring(1)要取字符串的第2个字符,所以会溢出。