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個字符,所以會溢出。