在java中使用逗号分隔符拆分字符串数组

时间:2011-11-07 17:48:47

标签: java

我有一个字符串数组 - > string[] arr={"CSE01A","ECE02B","MECH03C"};

现在我必须打印course = CSE01, ECE02,MECH03 和成绩= 'A','B','C'

我尝试使用逗号分隔符来使用split(),但这不适用于字符串数组..

请让我知道如何做到这一点。

9 个答案:

答案 0 :(得分:5)

那是因为你要分裂的内容中没有逗号分隔符。

您需要遍历数组元素并获取每个字符串的最后一个字符。

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 :(得分:2)

Java的split()接受一个String并将其拆分为一个数组,例如(“abc,def,ghi”)。split(“,”)为你提供一个带有“abc”,“def”,“ghi”的String []。您需要取出数组中的每个字符串并将最后一个字母(等级)分开。如果你只想打印出来:

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);
}

答案 2 :(得分:1)

您不需要拆分,必须将数组元素组合成一个字符串。

    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();

答案 3 :(得分:0)

split()是Sting的接受字符串并创建数组的方法。如果你想使用它,你应该说str.split("\\s*,\\s*") - 这对于空格是安全的。

但是你已经有了数组,所以你只想打印它。您可以使用Arrays.toString(arr)

答案 4 :(得分:0)

数组已经拆分,它不是字符串。为了打印,你将遍历元素:

for ( String courseAndGrade : arr ) {
    // split the course and grade:

    System.out.println( ... );
}

答案 5 :(得分:0)

您的课程列表不是包含逗号的字符串,因此您不能简单地“拆分”它们。您可以使用如下代码迭代数组:

for(int i=0; i < arr.length; i++){
    String packedString = arr[i];
}

在循环的每次迭代中,变量packedString将包含您的课程编号和等级(即数组第一次迭代时的CSE01A)。所以你只需要应用一个方法来解压缩数据。如果成绩总是只有一个字符,你可以使用子字符串来解析最后一个字符及其前面的所有内容,但是如果你有多字符等级(例如A-),你需要多做一些事情。复杂。

我犹豫是否进一步扩展,因为这听起来像是家庭作业。

答案 6 :(得分:0)

问题是,你没有每个课程的分隔符,课程和成绩在同一个字符串中。

既然你知道成绩已经结束了,你可以做一些简单的事情:

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);           
}

最后,你将拥有一个包含课程的String []和一个各自成绩的char []。

答案 7 :(得分:0)

这会迭代你的数组并输出你的课程和成绩:

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'

答案 8 :(得分:0)

您可以使用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

但我有一种感觉,在迭代数组和字符串操作时,这可能是一个简单的家庭作业分配。