Java 字符串用户输入验证

Java 字符串用户输入验证,java,Java,如何构造测试以确保用户在字符串中的某个位置提供了小数点?使用indexOf(“.”)方法检查字符串是否包含小数点。 例如: 使用这些函数 public boolean contains(CharSequence s) 一个简单的方法是使用for-each循环 char desiredCharacter = '.'; String myStr = getString(); //get a string somehow boolean b = false; for(char c : myStr.t

如何构造测试以确保用户在字符串中的某个位置提供了小数点?

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

使用这些函数

public boolean contains(CharSequence s)

一个简单的方法是使用for-each循环

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
}

这样,您就不必处理外部方法可能带来的低效问题。另外,编写自己的方法对开发很有好处——我们不希望我们的大脑变得一团糟,是吗?

是的,或者你可以编写自己的搜索循环,每个循环都有一个for。最好使用你自己的方法,除非你知道他们的更好。@RyanAmos,这是一个可怕的建议,写你自己的循环。使用API中存在的方法,不要重新启用控制盘。@camickr对于这样简单的事情,我不认为它一定是坏的。你在最大限度地提高效率。在这样的家庭作业问题中,这可能无关紧要,因为您不知道String.indexOf()使用什么方法来获取信息。它可以像我们期望的那样使用一个循环,也可以做一些我们不需要的额外的事情。看到String.indexOf()以整数而不是布尔值回复,它检查的内容超出了我们的需要,这只是验证某些东西的存在。@camickr我还认为初学者真的应该重新发明轮子几次以便练习。从重新发明轮子中可以学到很多东西,因此为什么编程类要创建数据结构,如链表、哈希表等@RyanAmos,然后在你的循环解决方案中发布你自己的答案建议。由于您完全改变了答案的概念,因此无需对此建议进行评论。这里给出的答案是“首先检查API中的方法”。你的建议是“从头开始编写循环代码”。对问题进行向下投票(或投票结束)而不发表评论无助于海报改进问题。-1表示句子结构不好和缺乏细节。还有,这是一个家庭作业问题吗?@RyanAmos,这个问题简单明了。你期待什么样的细节?根据问题的当前措辞,我们有两个很好的答案。@camickr如果看到OP向我们展示了他们的尝试以及他们的困境,我们会很高兴。这样,OP就可以得到尽可能多的帮助。@RyanAmos,在你最初的评论中再次指出这一点。我们不是读心术的人,我们不知道当你投否决票时你在想什么。这是海报的第一个问题,如果没有详细的评论,海报就无法改进。+1,如果你不在乎小数点在哪里,这是一个有趣的方法。如果你担心效率低下,这不是一条出路。toCharArray()复制内部
char[]
(必须复制,以保持字符串的不变性)。是的,我想您可以使用反射来获得对字符串的内部访问。不过,我不认为这会更快。我想用charAt()遍历单个字符可能会更快。此外,ToCharray()使用System.arrayCopy(),这是本机的,大大提高了效率。嗯,复制数组然后在其上迭代(您的方法)永远不会比简单地在原始数组上迭代(String.charAt所做的)快。添加反射可能会减少一些成本(虽然它可能会减少一些优化,但不确定),但现在您正在不遗余力地重新发明一个真正不需要重新发明的轮子。说“编写自己的代码练习很好”,这是一回事,但我们不要假装有任何其他理由这么做。
public boolean contains(CharSequence s)
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
}