java以空格为分隔标记取子字符串问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java以空格为分隔标记取子字符串问题相关的知识,希望对你有一定的参考价值。
通过out.readLine()取得txt文件一行字符串 s="user1 123 Alice Seller 1" 时,怎样取其中子字符串“user1” ,“123”, "Alice" ,“Seller”, “1” 分别赋值给其对应变量 id , password, name, job, level
string str[]=s.spilt(" ");先把字符串断开为数组然后取值就是了。取值的时候可以判断一下如果值不为空再赋值,可以避免子字符串里面有两个及其以上的空格。 参考技术A 字符串之间空格有几个?public static void main(String[]args)
String s = "user1 123 Alice Seller 1";
String[] arrays = s.split(" ");
String id = arrays[0];
String password = arrays[1];
String name = arrays[2];
String job = arrays[3];
String level = arrays[4];
System.out.println("id: " +id);
System.out.println("password: " +password);
System.out.println("name: " +name);
System.out.println("job: " +job);
System.out.println("level: " +level);
追问
原来是正则表达式拆分,split()参数中空格数竟然有严格规定,难怪之前取不了数据
本回答被提问者采纳子字符串和分隔符
【中文标题】子字符串和分隔符【英文标题】:Sub-strings and delimiters 【发布时间】:2018-03-05 21:26:15 【问题描述】:我正在尝试获取由某些字符(空格、逗号或点)分隔的句子,以检查它是否是回文。如果输入是“hello,potato.”,我将只检查“hello”的对称性,然后只检查土豆。
问题是,当我在循环的第一次迭代中搜索分隔符时,单词“hello”存储在子句中,但在第二次迭代中,单词应该存储为“土豆”将是“土豆。”。而且我无法删除“。”输入字符串末尾的分隔符。
for(int i=0;i<sentence.length();i++)
if(sentence[i]==' '||sentence[i]=='.'||sentence[i]==',')
//the couts is just to help me debug/trace
cout<<"i is now : "<<i<<endl;
if(i==delindex && i==sentence.length()-1)
subsentence=sentence.substr(temp+1,subsentence.length()-1);
else
subsentence=sentence.substr(delindex,i);
cout<<subsentence<<endl;
temp=delindex-1;
delindex=i+1;
最好的方法是什么?
【问题讨论】:
@JCollier 像马铃薯一样。最后有一个点(分隔符)我想要没有点 虽然有一种非常简单的方法可以使用.begin()
和.rbegin()
来推断回文,但解析多个分隔符仍然最好由strtok 处理,由<cstring>
提供。 getline
允许使用结束分隔符,但不允许使用多个分隔符。
@DavidC.Rankin 上帝保佑你,我一直在寻找 strtok
这是自切片面包以来最伟大的事情,用于标记字符串(在 <cstring>
标头中可以找到许多在 C++ 中没有直接对应类的块)跨度>
【参考方案1】:
上帝保佑你,我一直在寻找 strtok
实际上,您不需要strtok
(出于各种安全原因可能应该避免使用它),因为std::string
有一个名为find_first_of 的绝妙方法,它的作用非常类似于strtok
,因为它接受一堆字符并在偶然发现任何字符时返回索引。然而,在这种情况下,find_first_of
和 find_first_not_of 的组合更适合制作健壮的标记器。
因此,您可以将令牌搜索简化为:
#include <iostream>
#include <string>
int main()
std::string sentence = "hello,potato tomato.";
std::string delims = " .,";
size_t beg, pos = 0;
while ((beg = sentence.find_first_not_of(delims, pos)) != std::string::npos)
pos = sentence.find_first_of(delims, beg + 1);
std::cout << sentence.substr(beg, pos - beg) << std::endl;
https://ideone.com/rhMyvG
【讨论】:
以上是关于java以空格为分隔标记取子字符串问题的主要内容,如果未能解决你的问题,请参考以下文章