在switch语句中调用忽略大小写

时间:2019-07-05 21:45:21

标签: java

在下面包含switch语句的代码中,是否可以合并equalsIgnoreCase方法,即,无论是否输入a或A,用户都会收到成绩消息,等等。

我设法通过使用“将用户输入转换为大写”方法来获得正确的结果,但是我很好奇是否可以在这里使用ignoreCase方法。我尝试这样做,但是它似乎没有任何作用,可能是因为ignoreCase是一个布尔值,它返回true / false结果,而不是消息。我尝试对此进行研究,但所有在线结果均建议使用toUpperCase方法,这是我已经尝试并工作的方法。

private BluetoothGattCallback bleGattCallback = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {

        gatt.discoverServices();
        super.onConnectionStateChange(gatt, status, newState);
    }

    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {

        BluetoothGattService service = gatt.getService(UUID_Service);
        BluetoothGattCharacteristic charc= service.getCharacteristic(UUID_characteristic);
        gatt.writeCharacteristic(charc);
        super.onServicesDiscovered(gatt, status);
    }

    @Override
    public void onCharacteristicRead(BluetoothGatt gatt, final BluetoothGattCharacteristic characteristic, int status) {
        super.onCharacteristicRead(gatt, characteristic, status);
    }

    @Override
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {


        BluetoothGattService service = gatt.getService(UUID_Service);


        int data1 = 02;
        int data2 = 40;
        int data3 = 0;

         data1 = BluetoothGattCharacteristic.FORMAT_UINT8;
         data2 = BluetoothGattCharacteristic.FORMAT_UINT8;
         data3 = BluetoothGattCharacteristic.FORMAT_UINT8;

        byte[] value = new byte[]{(byte)data1 , (byte)data2 ,(byte)data3};

        characteristic.setValue(value);
        characteristic.setWriteType(BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE);
        runOnUiThread(new Runnable() {
            @Override
            public void run() {

                Toast.makeText(MainActivity.this,"completed!", Toast.LENGTH_SHORT).show();
            }
        });




        super.onCharacteristicWrite(gatt, characteristic, status);

    }
};

2 个答案:

答案 0 :(得分:3)

您可以switch (gradeLetter.toUpperCase()),但是对我来说,这似乎是Map<String, String>更好的用例。像

Scanner scan = new Scanner(System.in);

Map<String, String> map = new HashMap<>();
map.put("A", "Excellent!");
map.put("B", "Good job.");
map.put("C", "You passed");
map.put("D", "You can do better.");
map.put("F", "You failed.");

// ... No Loop?
System.out.println("Please enter grade.");
String gradeLetter = scan.next();

System.out.println(map.getOrDefault(gradeLetter.toUpperCase(), 
        String.format("%s is invalid.", gradeLetter)));

答案 1 :(得分:2)

如前所述,您可以打开gradeLetter.toUpperCase()

您还可以使用穿透,其中多个大小写标签跳转到同一代码块:

switch (gradeLetter) {
  case "A":
  case "a":
      message = "Excellent!";
      break;
  case "B":
  case "b":
      message = "Good job.";
      break;
  /* etc */

例如,考虑“ a”和“ A”。 break之后没有case "A":语句,因此执行直接进入case "a":块。