字符串问题 字符串String s=”SDsBEaA”,要求最后生成s=”AaBDESs”,能给下方法吗?最好给下具体代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是做排序吧?把字母按照先后输出忽略大小写是吧自己查一下API 这个不难的 直接一个个用char拿出来,放在数组里排序 再输出 API早查过了,排序的话是Collections中的的sort()方法,但是这个方法区分大小写, 给一个想法,用char一个个拿出来,比较大小,其实就是比较ascii难点是因为忽视大小写,其实可以做个判断,因为a的ascii比A大,所以可以与大Z比较,比大Z大的就是小写字母,你将它的ascii-32后就可以得到大写的字母,然后通过这个方式确定位置,最后得到结果 具体实现不麻烦阿,循环罢了,当然api中有现成的那最好了没有的话就只有自己动手了 char c = s.toCharArray();//排序for(int i=0;i<c.length-1;i++){ if(c[i]>90){ //c[i]为小写 if(c[i+1]>90){ //c[i+1]也为小写 if(c[i]-c[i+1]>0){ int j = c[i]; c[i] = c[i+1]; c[i+1] = j; } }else{ //c[i+1]为大写 int k = c[i]-32; if(c[i+1]<k){ k = c[i]; c[i] = c[i+1]; c[i+1] = k; } } }}else{ if(c[i+1]<=90){ if(c[i]>c[i+1]){ int j = c[i]; c[i] = c[i+1]; c[i+1] = j; } }else{ int k = c[i+1]-32; if(k>c[i]){ k = c[i+1]; c[i+1] = c[i]; c[i] = k; } }} char[] c = s.toCharArray(); static final String objectString = "JDBCspecificatiodefiesasetofstadarddatabasecolumtypesdefiedi" + "javasqlTypesclassadaveryspecificmappigofthesetypestoJavaObjectTy" + "pessuchasjavalagStrigjavamathBigDecimaletcSometimesthereisaeedto" + "useacustomJavatypeotkowtoJDBCdriverCayeeModelerallowstocofigurea" + "arbitraryJavaclassasaorgapachecayeemapObjAttributetypebysimplyet" + "erigafullyqualifiedamesuchclassithetypecolumofaObjAttributeHowe" + "verthereismoretoitthajustthatCayeeeedstokowhowtoistatiatethistyp" + "efromadatabaseprimitivevalueadcoverslyhowtotrasformaobjectofthec" + "ustomtypetoaJDBCcompatibleobjectJDBCspecificatiodefiesasetofsta" + "darddatabasecolumtypesdefiedijavasqlTypesclassadaveryspecificmapp" + "igofthesetypestoJavaObjectTypessuchasjavalagStrigjavamathBigDecim" + "aletcSometimesthereisaeedtouseacustomJavatypeotkowtoJDBCdriverCaye" + "eModelerallowstocofigureaarbitraryJavaclassasaorgapachecayeemapObj" + "Attributetypebysimplyeterigafullyqualifiedamesuchclassithetypecol" + "umofaObjAttributeHoweverthereismoretoitthajustthatCayeeeedstokowhow" + "toistatiatethistypefromadatabaseprimitivevalueadcoverslyhowtotrasfo" + "rmaobjectofthecustomtypetoaJDBCcompatibleobject";char chars[] = objectString .toCharArray(); // 对该字符数据进行排序 Arrays.sort(chars); System.out.println(String.copyValueOf(chars)); // 定义由于存储转换后字符的字符序列 StringBuilder transferStringBuffer = new StringBuilder(); List<Integer> filterOffSet = new ArrayList<Integer>(); for (int i = 0; i < chars.length; i++) { // 如果该位置的字符已经被使用过则直接跳过 if (filterOffSet.indexOf(i) != -1) { continue; } // 如果当前位置的字符与其相邻的字符相同,则直接跳过 if (i + 1 < chars.length && chars[i] == chars[i + 1]) { transferStringBuffer.append(chars[i]); continue; } transferStringBuffer.append(chars[i]); // 从当前字符所在位置的后面开始循环查询器对应的小写字符 for (int j =i ; j < chars.length; j++) { // 如果后续字符串存在小写字符则将其添加到结果集中,并记录其位置 // 并继续查找后续字符是否有相同的小写字符 if (chars[j] - chars[i] == 32) {// 大写字母与小写字母差32 transferStringBuffer.append(chars[j]); filterOffSet.add(j); } } } System.out.println(System.currentTimeMillis() - stime + "ms"); System.out.println(objectString); System.out.println(transferStringBuffer.toString());或许还有更高效的方法 mport java.util.*;public class Test{ public static void main(String[] args) { //System.out.println(countBits(-1)); System.out.println(sortString("SDsBEaA")); } public static String sortString(String str){ Character[] strChars=new Character[str.length()]; char[] strchars=str.toCharArray(); int count=0; for(char c:strchars){ strChars[count++]=c; } Arrays.sort(strChars,new Comparator<Character>(){ public int compare(Character c1,Character c2){ if(c1.equals(c2))return 0; if(Character.toLowerCase(c1)==Character.toLowerCase(c2)){ return c1-c2; }else{ return Character.toLowerCase(c1)-Character.toLowerCase(c2); } } public boolean equals(Object o){ return true; } }); count=0; for(Character c:strChars){ strchars[count++]=c; } return new String(strchars); }} 基本数据不能使用Comparator,char[]不能直接转为Character[] 郁闷!!! 关于for循环无法连续输入的一个问题 急,断电后lomboz eclipse里打开文件出错. 提问:如何监控浏览器 SOS ^0^ 求教java中图片缩小处理问题 从jdk1.5向jdk1.4转换有什么好办法?? 新手询问关于jdom的问题。着急中,在线等待 关于JTalbe的两个小问题!大虾请进 如何去掉那个“×”? Class.forname(driver)有error360错误:java.lang.classnotfoundexception,急救! java两个窗体,如何在另一个窗体改变上一个窗体画笔的颜色 求在校生实训项目! 去除 JFrame 垂直滚动条
忽略大小写是吧
自己查一下API 这个不难的
难点是因为忽视大小写,其实可以做个判断,因为a的ascii比A大,所以可以与大Z比较,比大Z大的就是小写字母,你将它的ascii-32后就可以得到大写的字母,然后通过这个方式确定位置,最后得到结果
具体实现不麻烦阿,循环罢了,当然api中有现成的那最好了
没有的话就只有自己动手了
//排序
for(int i=0;i<c.length-1;i++){
if(c[i]>90){ //c[i]为小写
if(c[i+1]>90){ //c[i+1]也为小写
if(c[i]-c[i+1]>0){
int j = c[i];
c[i] = c[i+1];
c[i+1] = j;
}
}else{ //c[i+1]为大写
int k = c[i]-32;
if(c[i+1]<k){
k = c[i];
c[i] = c[i+1];
c[i+1] = k;
}
}
}
}else{
if(c[i+1]<=90){
if(c[i]>c[i+1]){
int j = c[i];
c[i] = c[i+1];
c[i+1] = j;
}
}else{
int k = c[i+1]-32;
if(k>c[i]){
k = c[i+1];
c[i+1] = c[i];
c[i] = k;
}
}
}
static final String objectString = "JDBCspecificatiodefiesasetofstadarddatabasecolumtypesdefiedi"
+ "javasqlTypesclassadaveryspecificmappigofthesetypestoJavaObjectTy"
+ "pessuchasjavalagStrigjavamathBigDecimaletcSometimesthereisaeedto"
+ "useacustomJavatypeotkowtoJDBCdriverCayeeModelerallowstocofigurea"
+ "arbitraryJavaclassasaorgapachecayeemapObjAttributetypebysimplyet"
+ "erigafullyqualifiedamesuchclassithetypecolumofaObjAttributeHowe"
+ "verthereismoretoitthajustthatCayeeeedstokowhowtoistatiatethistyp"
+ "efromadatabaseprimitivevalueadcoverslyhowtotrasformaobjectofthec"
+ "ustomtypetoaJDBCcompatibleobjectJDBCspecificatiodefiesasetofsta"
+ "darddatabasecolumtypesdefiedijavasqlTypesclassadaveryspecificmapp"
+ "igofthesetypestoJavaObjectTypessuchasjavalagStrigjavamathBigDecim"
+ "aletcSometimesthereisaeedtouseacustomJavatypeotkowtoJDBCdriverCaye"
+ "eModelerallowstocofigureaarbitraryJavaclassasaorgapachecayeemapObj"
+ "Attributetypebysimplyeterigafullyqualifiedamesuchclassithetypecol"
+ "umofaObjAttributeHoweverthereismoretoitthajustthatCayeeeedstokowhow"
+ "toistatiatethistypefromadatabaseprimitivevalueadcoverslyhowtotrasfo"
+ "rmaobjectofthecustomtypetoaJDBCcompatibleobject";
char chars[] = objectString .toCharArray();
// 对该字符数据进行排序
Arrays.sort(chars);
System.out.println(String.copyValueOf(chars));
// 定义由于存储转换后字符的字符序列
StringBuilder transferStringBuffer = new StringBuilder();
List<Integer> filterOffSet = new ArrayList<Integer>();
for (int i = 0; i < chars.length; i++) {
// 如果该位置的字符已经被使用过则直接跳过
if (filterOffSet.indexOf(i) != -1) {
continue;
}
// 如果当前位置的字符与其相邻的字符相同,则直接跳过
if (i + 1 < chars.length && chars[i] == chars[i + 1]) {
transferStringBuffer.append(chars[i]);
continue;
}
transferStringBuffer.append(chars[i]);
// 从当前字符所在位置的后面开始循环查询器对应的小写字符
for (int j =i ; j < chars.length; j++) {
// 如果后续字符串存在小写字符则将其添加到结果集中,并记录其位置
// 并继续查找后续字符是否有相同的小写字符
if (chars[j] - chars[i] == 32) {// 大写字母与小写字母差32
transferStringBuffer.append(chars[j]);
filterOffSet.add(j);
}
}
}
System.out.println(System.currentTimeMillis() - stime + "ms");
System.out.println(objectString);
System.out.println(transferStringBuffer.toString());
或许还有更高效的方法
public class Test{
public static void main(String[] args) {
//System.out.println(countBits(-1));
System.out.println(sortString("SDsBEaA"));
}
public static String sortString(String str){
Character[] strChars=new Character[str.length()];
char[] strchars=str.toCharArray();
int count=0;
for(char c:strchars){
strChars[count++]=c;
}
Arrays.sort(strChars,new Comparator<Character>(){
public int compare(Character c1,Character c2){
if(c1.equals(c2))return 0;
if(Character.toLowerCase(c1)==Character.toLowerCase(c2)){
return c1-c2;
}else{
return Character.toLowerCase(c1)-Character.toLowerCase(c2);
}
}
public boolean equals(Object o){
return true;
}
});
count=0;
for(Character c:strChars){
strchars[count++]=c;
}
return new String(strchars); }
}