#java #arrays #sorting #output
Вопрос:
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'amp;amp; str.charAt(i)<='z')
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'amp;amp; str.charAt(i)<='z')
stri=stri ch[p ];
else
stri=stri chy[q ];
}
return stri;
}
}
Комментарии:
1. не могли бы вы, пожалуйста, добавить вопрос или хотя бы какое-то объяснение к вашему коду?
2. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы точно указать, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.
Ответ №1:
Ваш код в порядке. Проблема, которая возникает, заключается в том, что вы определили свои массивы длиной строки, поэтому, когда вы просматриваете и добавляете символы в массивы ch и chy, некоторые места могут быть пустыми, и при сортировке этого массива эти начальные пробелы будут в начале массива, и, таким образом, ch[0] даст пустое пространство.
Комментарии:
1. в строке нет пробелов, когда я печатаю ее в целом, она печатается правильно, просто определенные символы индекса не печатаются
Ответ №2:
Перед сортировкой 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;
и 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' amp;amp; str.charAt(i) <= 'z')
sb.append(ch[p ]);
else
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' amp;amp; c <='z')
ch [k ] = c;
else
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' amp;amp; c <='z' ? ch[p ] : chy[q ]);
}
return sb.toString();
}
// Test
System.out.println(caseSort("Hello,World!"));
Выход:
!dell,HloorW