2011-12-19 149 views
-1

如何构建一个测试以确保用户在字符串内某处提供了小数点?字符串用户输入验证

+2

在没有评论的情况下下调(或投票结束)问题并不能帮助海报改善问题。 – camickr

+0

-1由于句子结构不好而且缺乏细节。另外,这是一个功课问题? –

+0

@RyanAmos,问题简单而直接。你期待什么细节?根据目前的问题措辞,我们有两个很好的答案。 – camickr

回答

5

使用indexOf(“。”)方法检查字符串是否包含小数点。 如:

String str = "232.3"; 
if(str.indexOf(".") != -1) 
{ 
    // Contains a decimal point 
} 
else { 
    // Does not 
} 
+0

+1,就是我的建议。 – camickr

+0

是的,或者你可以写一个你自己的搜索循环。除非你知道他们的更好,否则最好使用你自己的方法。 –

+1

@RyanAmos,这是一个可怕的建议来编写你自己的循环。使用API​​中存在的方法并且不要转动轮子。 – camickr

2
String userInput="123.23"; 

if(userInput!=null && unserInput.indexOf('.')!=-1) 
{ 
    //contains decimal point 
} 
3

使用contains功能。

public boolean contains(CharSequence s) 
+0

+1,如果你不关心小数点在哪里,你会发现有趣的方法。 – camickr

0

一个简单的方法来做到这一点是与每个循环

char desiredCharacter = '.'; 
String myStr = getString(); //get a string somehow 
boolean b = false; 
for(char c : myStr.toCharArray()) 
    if(c == desiredCharacter){ 
     b = true; 
     break; 
    } 
if(b){ 
    //Character is in the string 
} 
else{ 
    //Character is not in the string 
} 

这样,您就不必处理由外部方法提出了可能的低效率。另外,编写自己的方法的做法对发展有好处 - 我们不希望我们的大脑变得麻木,我们会吗?

+0

如果您担心效率低下,是不是要走的路。 toCharArray()复制内部'char []'(它必须,为了维护String的不变性)。 – yshavit

+0

是的,我想你可以使用Reflection来获得字符串的内部访问权限。不过,我认为这不会更快。我想用charAt()迭代单个字符可能会更快。另外,toCharArray()使用本地的System.arrayCopy(),大大提高了效率。 –

+0

Um,复制一个数组然后迭代它(你的方法)永远不会比简单地遍历原来的(String.charAt所做的更快)。增加反射可能会带走一些成本(尽管它可能会减少一些优化,但不确定),但是现在,您正在竭尽全力重新发明一个实际上不需要重新创建的轮子。说“自己编写代码很好”是一回事,但我们不要假装还有其他理由要这样做。 – yshavit