首页 > 解决方案 > 开关中的计算案例语句(java)

问题描述

我一直在问自己这个问题,这是一个基本的问题,但我从来没有能够以任何其他方式做到这一点

目标else if是在代码中消除

我实际上有这个:

String contentType = parser.getMimeMessage().getContentType().toLowerCase(); 
//contentType can be for example: "text/a; charset=us-ascii"

String content = parser.getPlainContent(); 

if (contentType.indexOf("text/a") > 0) {
 processTextA(content);

} else if (contentType.indexOf("text/b") > 0) {
 processTextB(content);

} else if (contentType.indexOf("text/c") > 0) {
 processTextC(content);
}

我想做的是与此类似的事情:

String contentType = parser.getMimeMessage().getContentType().toLowerCase();
//contentType can be for example: "text/a; charset=us-ascii"

String content = parser.getPlainContent();

switch (contentType) {
 case (contentType.indexOf("text/a") > 0):
  processTextA(content);
  break;

 case (contentType.indexOf("text/b") > 0):
  processTextB(content);
  break;

 case (contentType.indexOf("text/c") > 0):
  processTextC(content);
  break;
}

有没有办法实现类似的东西?

在示例中,我放了 3 else if,但实际情况是,我有大约 20 个 else if一个在另一个后面

编辑

contentType 可以是text/a; charset=us-ascii,但是,它也可以是charset=us-ascii; text/a;

我不能相信发件人符合任何规范,因为它是公司之间的私有通信协议,因此split无法使用

我举了一个例子,但问题是需要计算案例陈述

标签: javaoptimizationswitch-statement

解决方案


对于初学者,我会使用:

contentType.contains("text/a")

代替:

contentType.indexOf("text/a") > 0

如果我对您的理解正确,那么您的内容中可能只有一个(通过contentType您使用而不是MimeMessage的事实推断出)。您可以简单地拆分by以获得所需的字符串部分。然后,您可以在字符串上切换大小写。像这样的东西:else ififcontentType;

String contentType = parser.getMimeMessage().getContentType().toLowerCase();
//contentType can be for example: "text/a; charset=us-ascii"

String content = parser.getPlainContent();

String contentTypeSplitted = contentType.split(";")[0];
switch (contentTypeSplitted) {
 case ("text/a"):
  processTextA(content);
  break;

 case ("text/b"):
  processTextB(content);
  break;

 case ("text/c"):
  processTextC(content);
  break;
}

推荐阅读