2015-07-03 62 views
1
firstLetter = word.charAt(0); 
    lastLetter = word.charAt((word.length()) - 1); 
    noFirstLetter = word.substring(1); 
    newWord = noFirstLetter + firstLetter; 
    if(word.equalsIgnoreCase(newWord)) 

替换字符所以我试着取词的第一个字母,如果我走字的第一个字母,距离其移至到底应该等于同一个词。我的代码在这里不起作用。例如,如果您将“d”移动到单词的末尾,则用户输入“梳妆台”,您将再次获得单词“梳妆台”。这就是我试图检查的java字符串

+4

如果您将d移动到最后,您将得到resserd,而不是梳妆台。 – Eran

+0

但是'dresser'在移动'd'到结束后仍然会如何...你还想扭转字符串吗? – Codebender

+0

请注意,字符串是不可变的... –

回答

4

我想你要做的是删除第一个字符,然后检查字符的其余部分是否围绕单词的中心对称(即使它很复杂我)

EG:

梳妆台=>(下降d)=> resser =>(添加d向右)=> resserd(从右至左读,一遍是梳妆台)。

你放弃的第一个字母后:

resser(甚至还有在字编号的字母)

r e s s e r 
    |_| 
    |_____| 
|_________| 

,因为它们是对称的,你可以说这个词是,如果你回文将D从左向右移动(反之亦然)。

如果我在第一时间误解了你的问题,上面的整件事情可能是可怕的错误。但我认为,你的问题不是一个简单的子串问题。

干杯。

3

好的,所以我假设你想采取string,将它的第一个索引移动到最后,然后将string颠倒过来。如果你对“梳妆台”这样的词做了这个,那么你最终会得到相同的价值。

像这样的事情可以工作,目前未经测试:

public StringBuilder reverseWord(String word){ 
    firstLetter = word.charAt(0); //find the first letter 
    noFirstLetter = word.substring(1); //removing the first index 
    newWord = noFirstLetter + firstLetter; //move first index to end 
    return new StringBuilder(newWord).reverse().toString(); //reverse 
} 

if(reverseWord("dresser").equals("dresser")){ 
    //do something 
} 

编辑:何指出,它通过对word调用length()检查实际参数的长度是很重要的。

1

如果您将'd'移动到单词“dresser”的末尾,您将得到“resserd”,这不等于“dresser”。

如果您将'd'移动到末尾,然后反转这个词那么他们是平等的。

因此,假设你考虑字符串,即使它们被颠倒等于,你想要的代码是:具有lenght 0,否则word.charAt字的重要检查

boolean testPass = false; 
if (word.length()==0) 
    testPass = true; 
else 
{ 
    firstLetter = word.charAt(0); 
    noFirstLetter = word.substring(1); 
    newWord = noFirstLetter + firstLetter; 
    reversed = new StringBuilder(newWord).reverse().toString() 
    if (word.equalsIgnoreCase(newWord) || word.equalsIgnoreCase(reversed)) 
    testPass = true; 
} 
if (testPass) 
    // Do something 

采取通知(0)会抛出异常。