谁给个答案。。。。
20 个解决方案
#1
什么 规律啊 总要 说说 吧。。。
#2
对各个字符循环,比较,插入,
先不说算法效率好不好,单要实现不是很容易吗?
先不说算法效率好不好,单要实现不是很容易吗?
#3
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);
}
}
}
#4
哦,错了,以为是大小写转换。。
#5
貌似没学数据结构与算法?
#6
LZ的要求大概是,要进行字符串排序,首先是从a-z的排序,然后里面包含有大写在小写前面的排序。
这个从实现角度来说应该不难,但是关键是考虑效率问题吧。
这个从实现角度来说应该不难,但是关键是考虑效率问题吧。
#7
就是按ASCII码排序嘛
#8
就是排序啊。按照字母的顺序排序。并且大写的放前面!
#9
同LS。。。。
#10
我也知道是大的字母放前面。。就像上面说的应该是根据ASCII码排序。。
可,怎么把字母转成ASCII码啊?
可,怎么把字母转成ASCII码啊?
#11
莫非这很难?
如果大于等于‘A’的,那么就减除32比较,如果此时等于了,那就比较实际值呗~~~~
如果大于等于‘A’的,那么就减除32比较,如果此时等于了,那就比较实际值呗~~~~
#12
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 秒) - 正常终止
#13
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)。通过使用回调,可以将会发生变化的代码分离出来,然后由不会发生变化的代码回头调用会发生变化的代码。”
#14
哥们说的对。顶一个。
这方式常用,并不代表有用,效率低
#15
集思广意
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);
}
}
#16
对英文字母,char强转int就得到ASCII码了。
#17
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));
}
}
#18
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;
}
{
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;
}
#19
楼主,不好意思,我用到的是C#。。。。。但思想是一样的哈。。。
#20
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
#21
#1
什么 规律啊 总要 说说 吧。。。
#2
对各个字符循环,比较,插入,
先不说算法效率好不好,单要实现不是很容易吗?
先不说算法效率好不好,单要实现不是很容易吗?
#3
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);
}
}
}
#4
哦,错了,以为是大小写转换。。
#5
貌似没学数据结构与算法?
#6
LZ的要求大概是,要进行字符串排序,首先是从a-z的排序,然后里面包含有大写在小写前面的排序。
这个从实现角度来说应该不难,但是关键是考虑效率问题吧。
这个从实现角度来说应该不难,但是关键是考虑效率问题吧。
#7
就是按ASCII码排序嘛
#8
就是排序啊。按照字母的顺序排序。并且大写的放前面!
#9
同LS。。。。
#10
我也知道是大的字母放前面。。就像上面说的应该是根据ASCII码排序。。
可,怎么把字母转成ASCII码啊?
可,怎么把字母转成ASCII码啊?
#11
莫非这很难?
如果大于等于‘A’的,那么就减除32比较,如果此时等于了,那就比较实际值呗~~~~
如果大于等于‘A’的,那么就减除32比较,如果此时等于了,那就比较实际值呗~~~~
#12
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 秒) - 正常终止
#13
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)。通过使用回调,可以将会发生变化的代码分离出来,然后由不会发生变化的代码回头调用会发生变化的代码。”
#14
哥们说的对。顶一个。
这方式常用,并不代表有用,效率低
#15
集思广意
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);
}
}
#16
对英文字母,char强转int就得到ASCII码了。
#17
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));
}
}
#18
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;
}
{
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;
}
#19
楼主,不好意思,我用到的是C#。。。。。但思想是一样的哈。。。
#20
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