给定一个字符串String str=“aAbebBssE”,自己实现以个算法,输出字符串为“AaBbbEess”

13兄 2010-01-06 10:05:28
给定一个字符串String str=“aAbebBssE”,自己实现以个算法,输出字符串为“AaBbbEess”;
谁给个答案。。。。
...全文
265 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaining522 2010-01-06
  • 打赏
  • 举报
回复

package number;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class number {

/**
* @param args
*/
public static void main(String[] args) {
String source = "hbaBACDEFGHIJKabcdefghijklmnopqrLMNOPQRSTYVWSYZstsyz";
byte [] by = source.getBytes();
ByteCompare [] bc = new ByteCompare[by.length];
for(int i = 0 ; i< by.length ; i ++){
bc[i] = new ByteCompare(by[i]);
}
Arrays.sort(bc,Collections.reverseOrder());

System.out.println("by = " + Arrays.toString(bc));
}

}

class ByteCompare implements Comparable {

private byte a ;

ByteCompare(byte a ){
this.a = a;
}

public byte getByte(){
return this.a;
}

public int compareTo(Object o) {
byte b = ((ByteCompare)o).getByte();
int re = 0;
if(a>96){ //a为小写
if(b>96){ //b为小写
re = a<b?1:(a==b?0:-1);
}else{ //b为大写
re = (a-32)<b?1:-1;
}
}else{ //a为大写
if(b>96){ //b为小写
re = (a+32)<b?1:((a+32)==b?1:-1);
}else{ //b为大写
re = a<b?1:(a==b?0:-1);
}
}
return re;
}

public String toString(){
return String.valueOf((char)a);
}

}



引用thinking in java 中的一段话 “程序设计的基本目标是“将保持不变的事物与会发生改变的事物相分离”,而这里,不变的是通用的排序算法,变化的是各种对象相互比较的方式。因此,不是将进行比较的代码编写成为不同的子程序,而是使用回调技术(callback)。通过使用回调,可以将会发生变化的代码分离出来,然后由不会发生变化的代码回头调用会发生变化的代码。”
gao11811 2010-01-06
  • 打赏
  • 举报
回复

import java.util.*;

class bijiao
{
public static void main(String[] args)
{
System.out.println(run("shkajyFskjhSDAKisjkSjkhsdHSAhjksASDhjklaa"));
}

public static StringBuffer run(String temp){
char m[]=temp.toCharArray();
Arrays.sort(m);
for(int y=0;y<m.length;y++){
for(int z=0;z<m.length;z++){

if (m[y]+32==m[z])
{
while(m[y]==m[y+1]){
y++;
}
char l=m[z];

for(int w=z;w>y+1;w--){
m[w]=m[w-1];
}
m[y+1]=l;
}
}
}
StringBuffer sb = new StringBuffer("");
for(int x =0;x<m.length;x++){
sb.append(m[x]);
}
return sb;
}
}

---------- java run ----------
AAAaaaDDdFHhhhhhKkkkkkkSSSSsssssijjjjjjly

输出完成 (耗时 1 秒) - 正常终止
xlxyeyu 2010-01-06
  • 打赏
  • 举报
回复
莫非这很难?
如果大于等于‘A’的,那么就减除32比较,如果此时等于了,那就比较实际值呗~~~~
13兄 2010-01-06
  • 打赏
  • 举报
回复
我也知道是大的字母放前面。。就像上面说的应该是根据ASCII码排序。。
可,怎么把字母转成ASCII码啊?
psyuhen 2010-01-06
  • 打赏
  • 举报
回复
同LS。。。。
liu_liyang 2010-01-06
  • 打赏
  • 举报
回复
就是排序啊。按照字母的顺序排序。并且大写的放前面!
霜之哀伤 2010-01-06
  • 打赏
  • 举报
回复
就是按ASCII码排序嘛
xiesisi3 2010-01-06
  • 打赏
  • 举报
回复
LZ的要求大概是,要进行字符串排序,首先是从a-z的排序,然后里面包含有大写在小写前面的排序。
这个从实现角度来说应该不难,但是关键是考虑效率问题吧。
  • 打赏
  • 举报
回复
貌似没学数据结构与算法?
phyerbarte 2010-01-06
  • 打赏
  • 举报
回复
哦,错了,以为是大小写转换。。
phyerbarte 2010-01-06
  • 打赏
  • 举报
回复

package str;

public class StringUpDown {

/**
* @param args
*/
public static void main(String[] args) {
String str="aAbebBssE";
char[] strArray = null;
for(int i=0;i<str.length();i++){
strArray = str.toCharArray();
strArray[i] = getReverseChar(strArray[i]);
str = new String(strArray);
}
System.out.println(str);
}

private static char getReverseChar(char c) {
if(Character.isLowerCase(c)){
return Character.toUpperCase(c);
}else{
return Character.toLowerCase(c);
}
}
}

rye_grass 2010-01-06
  • 打赏
  • 举报
回复
对各个字符循环,比较,插入,
先不说算法效率好不好,单要实现不是很容易吗?
amdgaming 2010-01-06
  • 打赏
  • 举报
回复
什么 规律啊 总要 说说 吧。。。
zhuzeitou 2010-01-06
  • 打赏
  • 举报
回复
import java.util.Arrays;
import java.util.Comparator;

class MyComparator implements Comparator {

@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof Character && o2 instanceof Character) {
Character c1 = (Character) o1;
Character c2 = (Character) o2;
if (Character.toUpperCase(c1) == Character.toUpperCase(c2))
return c1 - c2;
return Character.toUpperCase(c1) - Character.toUpperCase(c2);
}
return 0;
}

}

public class test {

public static void main(String... args) {
String str = "FDSAJFWEIQsdfjslakdweijdskajkerwqEWERQdsafjfdsa";
char[] c1 = str.toCharArray();
Character[] c = new Character[c1.length];
for (int i = 0; i < c1.length; i++)
c[i] = c1[i];
Arrays.sort(c, new MyComparator());
for (int i = 0; i < c1.length; i++)
c1[i] = c[i];
System.out.println(new String(c1));
}
}


输出结果:
AaaaaDdddddEEEeeFFfffIiJjjjjkkklQQqRrSsssssWWww
angel6709 2010-01-06
  • 打赏
  • 举报
回复
楼主,不好意思,我用到的是C#。。。。。但思想是一样的哈。。。
angel6709 2010-01-06
  • 打赏
  • 举报
回复
public int Compare(char x, char y)
{
return char.ToUpper(x).CompareTo(char.ToUpper(y));
}


--------------------->>>>>

public int Compare(char x, char y)
{
int ret= char.ToUpper(x).CompareTo(char.ToUpper(y));
if(ret==0)
{
ret= x.CompareTo(y);
}
return ret;
}
angel6709 2010-01-06
  • 打赏
  • 举报
回复
string s="aAbebBssE";
char[] ss=s.ToCharArray();

Array.Sort(ss,new Comparer());
MessageBox.Show(new String(ss));






class Comparer : IComparer<char>
{



public int Compare(char x, char y)
{
return char.ToUpper(x).CompareTo(char.ToUpper(y));
}


}
霜之哀伤 2010-01-06
  • 打赏
  • 举报
回复
对英文字母,char强转int就得到ASCII码了。
phyerbarte 2010-01-06
  • 打赏
  • 举报
回复
集思广意

package str;

import java.util.Arrays;

public class StringOrder {

/**
* @param args
*/
public static void main(String[] args) {
String str ="FDSAJFWEIQsdfjslakdweijdskajkerwqEWERQdsafjfdsa";
char[] strArray = str.toCharArray();
Arrays.sort(strArray);

int index = 0;
for (int i = 0; i < strArray.length; i++) {
for (int k = 0; k < strArray.length - 1; k++) {
char indexC = strArray[i];
if (indexC == strArray[k + 1]) {
index = k+1;
}

}
char currentChar = strArray[i];
for (int j = 0; j < strArray.length; j++) {
if (strArray[j] - 32 == currentChar) {
str = new String(strArray);
String stra = str.substring(0, index + 1);
String strb = str.substring(index + 1, j);
String strc = str.substring(j, j + 1);
String strd = str.substring(j + 1, strArray.length);
str = stra + strc + strb + strd;
strArray = str.toCharArray();
}
}
}
System.out.println(str);
}
}
苍蝇①号 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhaining522 的回复:]
Java codepackage number;import java.util.Arrays;import java.util.Collections;import java.util.List;publicclass number {/**
*@param args*/publicstaticvoid main(String[] args) {
String source="hbaBACDEFGHIJKabcdefghijklmnopqrLMNOPQRSTYVWSYZstsyz";byte [] by= source.getBytes();
ByteCompare [] bc=new ByteCompare[by.length];for(int i=0 ; i< by.length ; i++){
bc[i]=new ByteCompare(by[i]);
}
Arrays.sort(bc,Collections.reverseOrder());

System.out.println("by ="+ Arrays.toString(bc));
}

}class ByteCompareimplements Comparable {privatebyte a ;

ByteCompare(byte a ){this.a= a;
}publicbyte getByte(){returnthis.a;
}publicint compareTo(Object o) {byte b= ((ByteCompare)o).getByte();int re=0;if(a>96){//a为小写if(b>96){//b为小写 re= a<b?1:(a==b?0:-1);
}else{//b为大写 re= (a-32)<b?1:-1;
}
}else{//a为大写if(b>96){//b为小写 re= (a+32)<b?1:((a+32)==b?1:-1);
}else{//b为大写 re= a<b?1:(a==b?0:-1);
}
}return re;
}public String toString(){return String.valueOf((char)a);
}

}

引用thinking in java 中的一段话 “程序设计的基本目标是“将保持不变的事物与会发生改变的事物相分离”,而这里,不变的是通用的排序算法,变化的是各种对象相互比较的方式。因此,不是将进行比较的代码编写成为不同的子程序,而是使用回调技术(callback)。通过使用回调,可以将会发生变化的代码分离出来,然后由不会发生变化的代码回头调用会发生变化的代码。”
[/Quote]
哥们说的对。顶一个。
这方式常用,并不代表有用,效率低

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧