首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在java中拆分用户输入时提供的字符串?

如何在java中拆分用户输入时提供的字符串?
EN

Stack Overflow用户
提问于 2018-09-17 00:08:47
回答 2查看 124关注 0票数 1

如何拆分用户作为输入提供的carcolortype

输入格式为:

代码语言:javascript
复制
<Type>#<Color>

输出将显示具有相同color的汽车类型的数量

输入示例:

代码语言:javascript
复制
how many cars : 10
sedan#red
truck#yellow
van#white
suv#black
sedan#black
roadster#red
suv#gray
coupe#gray
minivan#white
truck#red

输出必须按字母顺序排序

代码语言:javascript
复制
black 2
gray 2
red 3
white 2
yellow 1

我尝试了一个示例代码,仍然没有完成,但是在如何拆分数组T^T的问题上有些纠结

Class1

代码语言:javascript
复制
 public class Class1 {

    private String type ;
    private String color;
    private String format;

    public Class1() {
        this.type = "";
        this.color = "";
        this.format = "";
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getFormat() {
        return format;
    }

    public void setFormat(String format) {
        this.format = format;
    }

    public void split () {  
        String part[] = format.split("#");
        setType(part[0]);
        setColor(part[1]); // i don't know if this will work or not.. 
    } 
}

Class2

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Class2 {


    public static void main(String[] args) throws NumberFormatException, IOException {
        // TODO Auto-generated method stub
        int n ;
        String format ;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        n = Integer.parseInt(br.readLine());

        Class1 [] dataArray = new Class1[n] ;
        Class1 data = new Class1();

        for(int a = 0 ; a <= dataArray.length ; a++) {
            dataArray[a] = data;
            data.setFormat(br.readLine());

            data.split();
            data.getType();
            data.getColor();
        }
    }
}

编码仍然没有完成,并且仍然不知道如何拆分数组。请帮我解决这个问题!

EN

回答 2

Stack Overflow用户

发布于 2018-09-17 00:35:28

将您的for循环改为:

代码语言:javascript
复制
   for(int a = 0 ; a <= dataArray.length ; a++) {
        dataArray[a] = data;
        data.setFormat(br.readLine());

        data.split();
        data.getType();
        data.getColor();
    }

要这样做:

代码语言:javascript
复制
    for(int a = 0 ; a < dataArray.length ; a++) {
        Class1 data = new Class1();
        dataArray[a] = data;
        data.setFormat(br.readLine());

        data.split();
        data.getType();
        data.getColor();
    }

两个重要的变化是:

  1. 你应该只在a < dataArray.length时循环,否则你会得到一个ArrayIndexOutOfBoundsException when a == dataArray.length。每次读入新行时,您都需要创建一个新的Class1实例,并将其存储在dataArray

a位置

除此之外,它看起来很好。显然,在您的设计中有一些吹毛求疵的地方--也许setFormat应该调用split,而不是需要一个单独的调用?--但是您现在应该能够遍历dataArray并计算颜色,可能是使用Map<String, Integer>

票数 0
EN

Stack Overflow用户

发布于 2018-09-17 01:04:24

在for循环内初始化新的对象Class1 data = new Class1();,而不是在它的外部初始化,否则它将在每次循环运行时被覆盖。

还要迭代通过a < dataArray.length而不是a <= dataArray.length

我已经添加了groupingBy来获取按颜色名称分组的计数。然后,我对结果Map<String, Integer>entrySet进行了排序,并打印出了内容。

我已经实现了预期的输出,而没有对您的代码进行太多修改。

代码语言:javascript
复制
public static void main(String[] args){
    try{
        int numberOfCars;
        String format ;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        numberOfCars = Integer.parseInt(br.readLine());
        Class1 [] dataArray = new Class1[numberOfCars] ;

        for(int a = 0 ; a < dataArray.length ; a++) {
            //Initializing new instance everytime
            Class1 data = new Class1();
            data.setFormat(br.readLine());
            data.split();
            dataArray[a] = data;
        }
        //Creating a Stream of Class1 objects
        Arrays.stream(dataArray)
              .collect(Collectors.groupingBy(car -> car.getColor(), Collectors.counting()))
              .entrySet() //Getting entries from Map
              .stream() //sorting after the Map is created to preserve the sorted order
              .sorted(Comparator.comparing(entry -> entry.getKey())) //Sorting by key, that is the Color property of Class1
              .forEach((entry) -> System.out.println(entry.getKey() + " "+ entry.getValue()));
        }catch (NumberFormatException | IOException | ArrayIndexOutOfBoundsException e) {
              System.out.println("Error occurred try again");
              e.printStackTrace();
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52355978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档