【问题标题】:String format with 3 conditions: is it possible? [closed]具有 3 个条件的字符串格式:可能吗? [关闭]
【发布时间】:2015-08-04 17:45:24
【问题描述】:

我想格式化我的输出文本,使其与我的计数器值相对应。例如,我有 3 个计数器,当它是 1、2 和大于 2 时,我想输出不同的单词。

我尝试过使用字符串格式,但它只适用于 2 个不同的计数器。

这是我的代码:

package vaja13;
import java.util.Scanner;
public class Vaja13
{
    public static void main(String[] args)
    {
        System.out.print("Vnesi besedilo: ");
        Scanner sc = new Scanner(System.in);
        String besedilo = sc.nextLine();
        char [] tabela  = besedilo.toCharArray();
        int crke = 0,stevilke = 0,presledki  = 0;
        int i=0;
        while(i<tabela.length-1)
        {
           if (Character.isLetter(tabela[i]))
           {
            crke++;
            i++;
           }
            if (Character.isDigit(tabela[i]))
            {
                stevilke++;
                i++;
            }
            if (Character.isWhitespace(tabela[i]))
            {
                presledki++;
                i++;
            }
        }  
       System.out.println(String.format("V besedilu je %d %s ", crke,crke==2,crke >2 ? "crka":"crki":"crke"));
        }
    }

【问题讨论】:

  • 不要链接到代码;在问题本身中包含相关部分。
  • 请直接在问题中发布您的代码。很少有人会费心去关注站外链接,而且在许多情况下,这些链接会停止工作,从而使这个问题在未来变得毫无用处。

标签: java string format output conditional-operator


【解决方案1】:

在最后的System.out.println 行中,3 个条件部分

crke==2,crke >2 ? "crka":"crki":"crke"

是无效的 Java 语法,您可以使用:

crke==2 ? "crka": crke > 2 ? "crki" :"crke"

不过,这有点难以阅读。请注意,? : 运算符从右到左关联。

【讨论】:

    【解决方案2】:

    代替

    System.out.println(String.format("V besedilu je %d %s ", crke,crke==2,crke &gt;2 ? "crka":"crki":"crke"));

    你必须这样做:

    System.out.println(String.format("V besedilu je %d %s ", crke, (crke==2 ? "crka": (crke &gt; 2? "crki": "crke"))));

    【讨论】:

      【解决方案3】:

      您可以为后缀创建一个查找表,并通过调用Math.min 来使用它,如下所示:

      private static String[] suffix = new String[] {"crka", "crki", "crke"};
      ...
      for (int i = 0 ; i != 5 ; i++) {
          System.out.print(i+" ");
          System.out.println(String.format("V besedilu je %d %s ", i, suffix[Math.min(i, 2)]));
      }
      

      这个解决方案的核心在于表达式Math.min(i, 2),对于i的非负值,它的计算如下:

      • 0i0
      • 11 为一时
      • 2i2 或以上时。

      请注意,如果i 为负值,上述代码将失败。

      Demo.

      【讨论】:

        【解决方案4】:

        感谢您的意见。我设法通过这种方式解决了我的问题。

        package vaja13;
        import java.util.*;
        class Vaja13 
        {
            public static void main(String[] args) 
            {
                System.out.print("Vnesi besedilo: ");
                Scanner sc = new Scanner(System.in);
                String besedilo = sc.nextLine();
                char [] tabela  = besedilo.toCharArray();
                int crke = 0, stevke = 0, presledki = 0, i = 0;
                while(i<tabela.length)
                {
                   if (Character.isLetter(tabela[i]))
                   {
                        crke++;
                   }
                   else if (Character.isDigit(tabela[i]))
                    {
                        stevke++;
                    }
                   else if (Character.isWhitespace(tabela[i]))
                    {
                        presledki++;
                    }
                   i++;
                }     
        
        
                Beseda besedaCrka = new Beseda
                (
                        new String[]{"crk","crka","crki","crke"}
                );
                Beseda besedaStevka = new Beseda
                (
                        new String []{"stevk","stevka","stevki","stevke"}
                );
                Beseda besedaPresledek = new Beseda 
                (
                        new String [] {"presledkov","presledek","presledka","presledki"}
                );
                Beseda glagolBiti = new Beseda
                (
                        new String [] {"je","je","sta","so"}
                );
                System.out.format("V besedilu %s %d %s, %d %s in %d %s.\n",
                glagolBiti.vrniObliko(crke),crke,besedaCrka.vrniObliko(crke),
                stevke,besedaStevka.vrniObliko(stevke),
                presledki,besedaPresledek.vrniObliko(presledki));
        
            }    
        }
        /**
         * Razred Beseda shranjuje slovnično obliko besede.
         */
        class Beseda
        {
            String oblikaBesede [];
            Beseda(String oblikaBesede[])
            {
                this.oblikaBesede = oblikaBesede;
            }
            String vrniObliko(int kolicina)
            {
              return  (kolicina < 1 || kolicina > 4? oblikaBesede[0] :
                      (kolicina == 2 ? oblikaBesede[2] :
                      (kolicina == 3 || kolicina == 4 ? oblikaBesede[3] :
                      oblikaBesede[1])));
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2021-03-30
          • 1970-01-01
          • 1970-01-01
          • 2015-05-13
          • 2013-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-01
          相关资源
          最近更新 更多