class Solution
{
public static String caseSort(String str)
{
char ch[]=new char[str.length() ] 。
char chy[]=new char【str.length()】。
int k=0, l=0;
for(int i=0; i<str.length();i )
{
if(str.charAt(i)>='a'/span>&& str.charAt(i)<='z'/span>)
ch[k ]=str.charAt(i);
else
chy[l ]=str.charAt(i);
}
Arrays.sort(ch);
Arrays.sort(chy)。
int p=0,q=0; String stri=";
for(int i=0; i<str.length();i )
{
if(str.charAt(i)>='a'/span>&& str.charAt(i)<='z'/span>)
stri=stri ch[p ]。
else
stri=stri chy[q ]。
}
return stri;
}
}
uj5u.com熱心網友回復:
你的代碼很好。發生的問題是,你用字串的長度定義了你的陣列,所以當你在ch和chy陣列中回圈并添加字符時,一些地方可能是空的,當你對這個陣列進行排序時,這些初始空格將在陣列的開始,因此ch[0]將給出一個空白。
uj5u.com熱心網友回復:
在對ch和chy陣列進行排序之前,需要對其進行修剪,以去除帶有''字符的空單元,例如,使用方法Arrays::copyOf:
ch = Arrays.copyOf(ch, k);
chy = Arrays.copyOf(chy, l);
Arrays.sort(ch);
Arrays.sort(chy)。
或者,p和q應該被初始化為某種移位,而不是0 - 如果ch包含k小寫字母,那么int p = ch.length - k;/code>和q = chy.length - l;
另外,使用StringBuilder來連接回圈中的字符會更好。
int p = ch.length - k, q = chy.length - l。
StringBuilder sb = new StringBuilder(str.length())。
for (int i = 0; i< str.length(); i ) {
if (str.charAt(i) >= 'a'/span> && str.charAt(i) <= 'z')
sb.append(ch[p ])。
else[/span
sb.append(chy[q ])。
}
return sb.toString()。
帶有更多重構和測驗的完整代碼:
public static String caseSort(String str) {
if (str == null || str.isEmpty() ) {
return str。
}
int n = str.length()。
char ch[] = new char[n];
char chy[] = new char[n];
int k = 0, l =0;
for (char c : str.toCharArray() } {
if (c >='a' && c <='z')
ch [k ] = c;
else[/span
chy[l ] = c。
}
// ch = Arrays.copyOf(ch, k);
// chy = Arrays.copyOf(chy, l);
Arrays.sort(ch);
Arrays.sort(chy)。
int p = ch.length - k, q = chy.length - l。
StringBuilder sb = new StringBuilder(n)。
for (char c : str.toCharArray() } {
sb.append(c >='a' && c <='z' ? ch[p ] : chy[q ]) 。
}
return sb.toString()。
}
// Test
System.out.println(caseSort("Hello,World!") )。
輸出:
!dell,HloorW
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/333337.html
標籤:
上一篇:二進制搜索樹的布林值回傳型別
