【问题标题】:How to Compare a Substring to a Normal White Space in Java如何在 Java 中将子字符串与普通空格进行比较
【发布时间】:2012-12-27 23:35:20
【问题描述】:

很抱歉,这似乎是一个愚蠢的问题,但我无法弄清楚如何将 Java 中用户输入的子字符串与空格进行比较。在我的程序中,我使用

      Input.getString()

这并不常见,但 Input.class 用于接收来自用户的输入。这是我的程序:

public class Project1
{
static String E [] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", " " };
static String M [] = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "-----", "|" };

public String input[];
public String output[];
static String TranslationType;
static boolean Bool;
static String TextToTranslate;
static int i;
static int SectionOfString;
static StringBuffer emcStringBuffer = new StringBuffer();
static StringBuffer mceStringBuffer = new StringBuffer();
static String emc = "English-MorseCode";
static String mce = "MorseCode-English";
static StringBuffer MorseCodeLetter = new StringBuffer();
static String emcString;
static String mceString;
static String space = " ";

public static void main( String [] args )
{
    if ( E.length != M.length )
    {
        System.out.println( "Error" );
    }
    TranslationType = Input.getString( "Please choose a method of translation (\"English-MorseCode\" or \"MorseCode-English\") " );
    if ( TranslationType.equals( "English-MorseCode" ) )
    {
        Bool = true;
        System.out.println( TranslationType );
    }
    else if( TranslationType.equals( "MorseCode-English" ) )
    {
        Bool = false;
        System.out.println( TranslationType );
    }

    while ( !TranslationType.equals( emc ) && !TranslationType.equals( mce ) )
    {
        System.out.println( "Error: \"" + TranslationType + "\" is not a valid response.");
        TranslationType = Input.getString( "Please choose a method of translation (\"English-MorseCode\" or \"MorseCode-English\") " );
        if ( TranslationType.equals( "English-MorseCode" ) )
        {
            Bool = true;
            System.out.println( TranslationType );
        }
        else if( TranslationType.equals( "MorseCode-English" ) )
        {
            Bool = false;
            System.out.println( TranslationType );
        }
    }
    TextToTranslate = Input.getString( "What would you like to translate?" );
    TextToTranslate = TextToTranslate.toUpperCase();
    System.out.println( TextToTranslate );
    if ( Bool == true )
    {
        for ( SectionOfString = 0; SectionOfString < TextToTranslate.length(); SectionOfString++ )
        {
            for ( i = 0; i < E.length; i++ )
            {
                if ( TextToTranslate.substring( SectionOfString, SectionOfString + 1 ).equals( E[i] ) )
                {
                    emcStringBuffer.append( M[i] + " " );
                }
            }
        }
        emcString = emcStringBuffer.toString();
        System.out.println( emcString );
    }
    else if ( Bool == false )
    {
        for ( SectionOfString = 0; SectionOfString < TextToTranslate.length(); SectionOfString++ )
        {
            if ( TextToTranslate.substring( SectionOfString, SectionOfString + 1 ).equals( space ) )
            {
                for ( i = 0; i < M.length; i++ )
                {
                    if ( MorseCodeLetter.equals( M[i] ) )
                    {
                        mceStringBuffer.append( E[i] );
                        System.out.println( MorseCodeLetter + ";" + mceStringBuffer );
                    }
                }
            }
            else
            {
                if ( TextToTranslate.substring( SectionOfString, SectionOfString + 1 ).equals( M[36] ) )
                {
                    mceStringBuffer.append( E[36] );
                }
                else
                {
                    MorseCodeLetter.append( TextToTranslate.substring( SectionOfString, SectionOfString + 1 ) );
                }
            }
        }
        mceString = mceStringBuffer.toString();
        System.out.println( mceString );
    }
    System.out.println( "Done" );
}
}

问题似乎是在将摩尔斯电码翻译成英文时,这部分代码从未使用过:

if ( TextToTranslate.substring( SectionOfString, SectionOfString + 1 ).equals( space ) )
            {
                for ( i = 0; i < M.length; i++ )
                {
                    if ( MorseCodeLetter.equals( M[i] ) )
                    {
                        mceStringBuffer.append( E[i] );
                        System.out.println( MorseCodeLetter + ";" + mceStringBuffer );
                    }
                }
            }

这会导致莫尔斯电码字母无法分开。例如,如果 TextToTranslate 的输入是

. .-. | .-. .

那么程序会认为..-..-.是一个词。我不确定这是否是翻译结果无法打印到终端(或 Windows 上的命令提示符)的原因。

另外,我之前尝试将空格作为静态字符,我只是尝试将空格作为最终字符,在 if 构造中使用以下内容,我遇到了同样的问题:

TextToTranslate.charAt( SectionOfString ) == space

我不确定为什么会出现这个问题,我试图找到一个类似的问题但无法找到,所以如果有人知道如何解决这个问题,我将不胜感激。

注意:我在 Java 编程论坛(用户:Indybones33)上问了同样的问题

【问题讨论】:

  • 有趣的问题,但是您的解码过程似乎与维基百科对摩尔斯电码间距的定义不匹配...| 来自哪里?这相当于七个点吗?
  • 建议:在if 中使用TextToTranslate.charAt(SectionOfString) == space,这要求space 改为final char space = ' ';

标签: java string compare substring whitespace


【解决方案1】:

这会导致莫尔斯电码字母无法分开。例如, 如果 TextToTranslate 的输入是

。 .-. | .-. .那么程序会认为..-..-.是一个词。 我不确定这是否是翻译结果没有的原因 打印到终端(或 Windows 上的命令提示符)。

你知道吗?还是你假设它?我觉得你错了。

我认为真正的问题是这样的:

if ( MorseCodeLetter.equals( M[i] ) 

这应该总是返回false,因为MorseCodeLetter 的类型是StringBufferM[i] 的类型是String

您只需这样做即可解决此问题:

if ( MorseCodeLetter.toString().equals( M[i] ) )

附带说明,使用StringBuffer 不必要地过于复杂。您可以简单地使用字符串连接 (String MorseCodeLetter = ""; MorseCodeLetter += letter;)。此外,通常StringBuffer 用于多线程程序,StringBuilder 是首选。

旁注 2:您的所有符号和命名约定都不是标准的 Java 约定。这意味着其他 Java 程序员很难轻松阅读您的代码。只有 class 名称应该是大写驼峰式。变量名(如代码中的MorseCodeLetter)应为小驼峰式。

【讨论】:

  • 谢谢。解决了部分问题,所以现在部分程序打印到终端: MorseCode-English 。 .-. | .-. . EF F 完成
【解决方案2】:

我没有通过代码示例的复杂性,但这里是一个简单的空间比较,以防万一这有帮助。

String str = "x y";
String strSpace = " ";

if (strSpace.equals(str.substring(1,2))) {
    System.out.println("Bingo");
}

【讨论】:

  • 感谢您的建议,但修改后出现同样的问题。
猜你喜欢
  • 2010-10-06
  • 2017-02-20
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多