因此,这部分作业希望我们采用一组字符串,然后我们将返回一个字符串列表。在字符串集中,我们将有电子邮件地址,即myname@uark.edu。我们要提取电子邮件地址的第一部分;名称,然后将其放在字符串列表中。在上面的示例中,将myname放入列表中。
我目前使用的代码使用迭代器从Set中提取字符串。然后,我使用String.contains(“ @”)作为错误检查,以确保字符串中包含@符号。然后,我从字符串的末尾开始,并使用string.charAt(“ @”)检查每个字符。一旦找到它,我就用正确的部分制作一个子串,并将其发送到列表中。
我的问题是我想使用递归方法并减少运算量。我正在考虑将string.length()/ 2分开,然后在下半部分使用String.contains(“ @”)的方法。如果那一半确实包含@符号,则它将递归调用函数。如果后半部分不包含@符号,则前半部分将具有@符号,我们将以递归方式调用该函数。
所以我的问题是,当我递归调用该函数并将其发送给“子字符串”时,一旦找到@符号,我将仅拥有子字符串的索引,而没有原始字符串的索引。关于如何跟踪它的任何想法,或者我应该关注的命令/方法。下面是我的原始代码。任何意见欢迎。
public static List<String> parseEmail(Set<String> emails)
{
List<String> _names = new LinkedList<String>();
Iterator<String> eMailIt=emails.iterator();
while(eMailIt.hasNext())
{
String address=new String(eMailIt.next());
boolean check=true;
if(address.contains("@"))//if else will catch addresses that do not contain '@' .
{
String _address="";
for(int i=address.length(); i>0 && check; i--)
{
if('@'==address.charAt(i-1))
{
_address=new String(address.substring(0,i-1));
check=false;
}
}
_names.add(_address);
//System.out.println(_address);//fill in with correct sub string
}
else
{
//System.out.println("Invalid address");
_names.add("Invalid address");//This is whats shownn when you have an address that does not have an @ in it.
} // could have it insert some other char i.e. *%# s.t. if you use the returned list it can skip over invalid emails
}
return _names;
}
**有人建议我根据API使用String.indexOf(“ @”)BUT,但此方法只会返回符号的第一次出现,因此我必须假设在字符串中可能有多个“ @”地址,我必须使用最后一个。谢谢你的建议。我正在查看其他建议,并将向您举报。
***所以有一个string.lastindexOf(),这就是我需要的。
public static List<String> parseEmail(Set<String> emails)
{
List<String> _names = new LinkedList<String>();
Iterator<String> eMailIt=emails.iterator();
while(eMailIt.hasNext())
{
String address=new String(eMailIt.next());
if(address.contains("@"))//if else will catch addresses that do not contain '@' .
{
int endex=address.lastIndexOf('@');
_names.add(address.substring(0,endex-1));
// System.out.println(address.substring(0,endex));
}
else
{
// System.out.println("Invalid address");
_names.add("Invalid address");//This is whats shownn when you have an address that does not have an @ in it.
} // could have it insert some other char i.e. *%# s.t. if you use the returned list it can skip over invalid emails
}
return _names;
}
最佳答案
不要重新发明轮子(当然,除非您也被要求)。 Java已经为您尝试String.indexOf(String str)
提供了一个内置函数。用它。
final String email = "someone@example.com";
final int atIndex = email.lastIndexOf("@");
if(atIndex != -1) {
final String name = email.substring(0, atIndex);
}
关于java - 查找字符优化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9241865/