按第一个字符排序

时间:2013-03-04 12:11:51

标签: java

手头的问题是每个政策编号是一个由9个字符组成的字符串,表示保险单的类型

  • B for building policy
  • C for Contents Policy
  • L for life政策
  • V for car policy

保单号的其余8个字符中的每一个都是十进制数字。

我尝试过使用charAt,但是有人告诉我有一种更好的方法

public String getpolicyNo(String initpolicyNo) {

    /**
     * Access method to find the first character of the policy to then
     * determine what type of policy it is.
     */
    String b = "B";
    String C = "C";
    String L = "L";
    String V = "V";

    char c1 = b.charAt(0);
    char c2 = C.charAt(0);
    char c3 = L.charAt(0);
    char c4 = V.charAt(0);


    if (c1 == 0) {
        System.out.println("Its building" + c1);
        return initpolicyNo;
    } else {
        if (c2 == 0) {
            System.out.println("Its Content");
            return initpolicyNo;
        } else {
            if (c3 == 0) {
                System.out.println("Its life");
                return initpolicyNo;
            } else {
                if (c4 == 0) {
                    System.out.println("Its car");

                    return initpolicyNo;
                }
            }
        }
    }
    throw new IllegalArgumentException();
}

我没有找你为我提供答案,我只是在寻找任何可能的替代方案和可能的建议。

非常感谢

6 个答案:

答案 0 :(得分:3)

我不确定你想要实现什么,但我会这样写:

public String getpolicyNo(String initpolicyNo) {
    switch(initPolicyNo.charAt(0))
    {
       case 'B':
          System.out.println("Its building B");
          return initpolicyNo;
       case 'C':
          System.out.println("Its building C");
          return initpolicyNo;
       case 'L':
          System.out.println("Its building L");
          return initpolicyNo;
       case 'V':
          System.out.println("Its building V");
          return initpolicyNo;
    }

    throw new IllegalArgumentException();
}

答案 1 :(得分:1)

我建议您使用Enum。 Enum的每个值都有一个序数值,您可以按其排序 如果您想阅读Enums简介,以下网站将提供帮助:Enum Types - The Java Tutorials

enum Policy {
     BUILDING_POLICY, CONTENTS_POLICY, LIFE_POLICY, CAR_POLICY
}

对于每个枚举值,您可以指定一个自定义值,您可以使用该值对其进行排序。

答案 2 :(得分:1)

public void whatItIs(String s){

  if(s.length() < 1){
    //-- nothing to see here ---
    return;
  }

  //-- case insensitive --
  char c = Character.toUpperCase(s.charAt(0));

  switch(c){
    case 'B':
      //-- its a building !--
      break;
    case 'C':
      //-- its a c........ !--
      break;
    case 'L':
      //-- its a l........ !--
      break;
    case 'V':
      //-- its a v........ !--
      break;
    default:
      //-- its something else :(--
  }
}

答案 3 :(得分:0)

  

我尝试过使用charAt,但是有人告诉我有一点点   更好的方式

没有比使用charAt更好的方法来获取字符串的第一个字母。

而不是拥有大量的if / switch以及什么不是,可以在你的头上获得更多的OOP。

Map<Character, String> myMap = new HashMap<Character, String>() {{
        put('B', "Its building");
        put('C', "Its content");
        put('L', "its life");
        put('V', "its vehicle");
    }} ;
    public void iShouldBeDoingMyOwnWork(String initpolicyNo) {
        System.out.println(myMap.get(initpolicyNo.charAt(0)));
    }

答案 4 :(得分:0)

public String getpolicyNo(String initpolicyNo) {

        switch (initpolicyNo.charAt(0)) {
        case 'B':
            System.out.println("Its building" );
            break;
        case 'C':
            System.out.println("Its Content");
            break;
        case 'L':
            System.out.println("Its life");
            break;
        case 'V':
            System.out.println("Its car");
            break;
        default:
            throw new IllegalArgumentException();
            break;
        }
        return initpolicyNo;
}

答案 5 :(得分:0)

您可以在代码中添加enums,也可以使用switch语句代替当前的if/else代码:

    char type = initpolicyNo.charAt(0);
    switch (type) {
        case 'B':
            // do stuff
            break;
        case 'C':
            // do stuff
            break;
    }

注意:我认为您的代码可能存在问题,因为在我看来您应该启用initpolicyNo,而不是实际类型?