#java
#java
Вопрос:
У меня есть массив строк -> string[] arr={"CSE01A","ECE02B","MECH03C"};
Теперь я должен напечатать course= CSE01, ECE02,MECH03
и grade= 'A','B','C'
Я пытался использовать split(), используя разделитель запятой, но это не работает для массива строк..
Пожалуйста, дайте мне знать, как это сделать.
Комментарии:
1. split() не делает того, что вы, кажется, думаете, он делает, он берет строку и разбивает ее на массив. Все ли эти строки следуют одному и тому же шаблону? То есть 3 буквы, 2 цифры, 1 буква, где вы хотите иметь строку до последней буквы и последнюю букву в отдельных строках?
2. Вам просто нужно выполнить итерацию по содержимому массива. split() разделяет сами строки.
3. Является ли запятая между элементами в выходных данных необходимой?
4. Примечание к редактированию Из-за пересмотра ответы вообще не имели смысла; Я откатил его.
Ответ №1:
Это потому, что в том, что вы пытаетесь разделить, нет разделителя запятой.
Вам нужно перебрать элементы массива и захватить последний символ каждой строки.
for (String s : arr) {
int l = s.length();
String course = s.substring(0, l-1);
String grade = s.substring(l-1);
}
Для полноты:
List<String> courses = new ArrayList<String>();
List<String> grades = new ArrayList<String>();
for (String s : arr) {
int l = s.length();
courses.add(s.substring(0, l-1));
grades.add(s.substring(l-1));
}
System.out.println(StringUtils.join(courses, ", "));
System.out.println(StringUtils.join(grades, ", "));
Комментарии:
1. Для полноты: вам следует добавить импорт SpringUtils
2. @Ralph Да, и определение класса, и метод, и что-то, что его вызывает, и… Существует точка уменьшения отдачи, которая уже превышена.
3. Нет: я серьезно, потому что StringUtils не является стандартной Java, или вы используете com.sun.xml.internal.ws.util. StringUtils?
4. @Ralph Нет. Я также считаю, что разработчики должны иметь возможность самостоятельно находить материал, и это легко. У вас достаточно очков, чтобы отредактировать сообщение, если вы так сильно к этому относитесь. Даже если OP не может найти или не знает о Commons Lang, намерение очевидно, и они могут кодировать свои собственные.
5. Те же разработчики, которые задают этот вопрос?
Ответ №2:
Функция split() Java принимает строку и разбивает ее на массив, например («abc, def, ghi»).разделение(«,») дает вам строку [] с «abc», «def», «ghi». Вам нужно взять каждую строку в вашем массиве и разделить последнюю букву (класс). Если вы просто хотите распечатать его:
for(String s : arr) {
String course = s.substring(0,s.length()-1);
String grade = s.substring(s.length()-1);
System.out.println("Course: " course " Grade: " grade);
}
Ответ №3:
Вам не нужно разделять, вы должны объединить элементы массива в строку.
String[] arr={"CSE01A","ECE02B","MECH03C"};
StringBuilder coursesBuilder = new StringBuilder();
StringBuilder gradeBuilder = new StringBuilder();
String[] arr = new String[0];
for (int i = 0; i < arr.length; i ) {
String course = arr[i].substring(0, arr.length - 1);
String grade = arr[i].substring(arr.length - 1);
coursesBuilder.append(course);
gradeBuilder.append("'" grade "'");
boolean hasNext = (i 1) < arr.length;
if (hasNext) {
coursesBuilder.append(", ");
gradeBuilder.append(", ");
}
}
String courses = coursesBuilder.toString();
String grades = gradeBuilder.toString();
Комментарии:
1. Я не думаю, что это то, что пытается сделать OP.
2. @Дэйв Ньютон: что еще? «Я пытался использовать split(), используя разделитель запятой, но это не работает для массива строк .. »
3. Громоздкий, но более подходящий для цели 🙂 Ваш первоначальный ответ на самом деле ни на что не ответил, вот и все. (Кроме того, технически не было бы необходимости объединять их обратно в строку.) Но все же 1 за предоставление полного решения после редактирования.
Ответ №4:
split()
это метод Sting, который принимает строку и создает массив. Если вы хотите его использовать, вы должны сказать str.split("\s*,\s*")
— это безопасно для пробелов.
Но у вас уже есть массив, поэтому вы просто хотите его распечатать. Вы можете использовать Arrays.toString(arr)
.
Комментарии:
1. Arrays.toString(arr) выведет массив, но он не обеспечит желаемый результат, который он указал.
Ответ №5:
массив уже разделен, это не строка. Для печати вам нужно выполнить цикл по элементам:
for ( String courseAndGrade : arr ) {
// split the course and grade:
System.out.println( ... );
}
Ответ №6:
Ваш список курсов — это не строка, содержащая запятые, поэтому вы не можете просто «разделить» их. Вы можете выполнить итерацию по массиву с кодом, который выглядит следующим образом:
for(int i=0; i < arr.length; i ){
String packedString = arr[i];
}
на каждой итерации цикла переменная packedString будет содержать номер вашего курса и оценку (т. Е. CSE01A на первой итерации массива). Итак, вам просто нужно применить метод для распаковки данных. Если оценка всегда состоит из одного символа, вы можете использовать substring для разбора последнего символа и всего, что перед ним, но если у вас есть многосимвольные оценки (например, A-), вам нужно будет сделать что-то более сложное.
Я не решаюсь расширять дальше, поскольку это звучит как домашнее задание.
Ответ №7:
Проблема в том, что у вас нет разделителя для каждого курса, курс и оценка находятся в одной строке.
Поскольку вы знаете, что оценка находится в конце, вы могли бы сделать что-то простое вроде этого:
String[] arr = {"CSE01A","ECE02B","MECH03C"};
String[] courses = new String[arr.length];
char[] grades = new char[arr.length];
for (int i = 0; i < arr.length; i ) {
courses[i] = arr[i].substring(0, arr[i].length() - 1);
grades[i] = arr[i].charAt(arr[i].length()-1);
}
В конце у вас будет строка[] с курсами и символ[] с их соответствующими оценками.
Ответ №8:
Это повторит ваш массив и выведет ваши курсы и оценки:
StringBuilder courses = new StringBuilder();
StringBuilder grades = new StringBuilder();
String delimiter = "";
for (String s : arr) {
courses.append(delimiter).append(s.subSequence(0, s.length() - 1));
grades.append(delimiter).append("'").append(s.substring(s.length() - 1)).append("'");
delimiter = ",";
}
System.out.println("Courses: " courses.toString()); // prints CSE01,ECE02,MECH03
System.out.println("Grades: " grades.toString()); // prints 'A','B','C'
Ответ №9:
Вы могли бы использовать Guava, чтобы упростить обработку преобразований строк и объединить результаты вместе:
package testCode;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
public class TestMain {
static Joiner joinWithComma = Joiner.on(", ").skipNulls();
private static String getCourses(Iterable<String> fromArray) {
return joinWithComma.join(Iterables.transform(fromArray,
new Function<String, String>() {
@Override
public String apply(String arg0) {
return arg0.substring(0, arg0.length() - 1);
}
}));
}
private static String getGrades(Iterable<String> fromArray) {
return joinWithComma.join(Iterables.transform(fromArray,
new Function<String, String>() {
@Override
public String apply(String arg0) {
return arg0.substring(arg0.length() - 1, arg0.length());
}
}));
}
public static void main(String[] args) {
String[] arr = { "CSE01A", "ECE02B", "MECH03C" };
System.out.println(getCourses(Lists.newArrayList(arr)));
System.out.println(getGrades(Lists.newArrayList(arr)));
}
}
Вывод:
CSE01, ECE02, MECH03
A, B, C
Однако у меня такое чувство, что это слишком много для того, что может быть простым домашним заданием по перебору массивов и манипулированию строками.