字符串截取操作
txt文件中有一行1,sam,6.72,"ha,,,,""棋子""","Hello"
要求输出结果:
1 sam 6.72 ha,,,,"棋子" Hello --------------------编程问答-------------------- 使用JAVASCRIPT 将逗号转换成空格
"1,sam,6.72,"ha,,,,""棋子""","Hello"".replace(/\s+/g,' ')
不晓得是不是你要的,哈哈,试试吧 --------------------编程问答-------------------- LS笨蛋 --------------------编程问答-------------------- 这个没有明显规律,需要写几步算法操作了 --------------------编程问答--------------------
切,走开。
问题:字符串A="123 456 789" 中间的空格不一定是半角(或多个空格) 怎样讲A变成B="123,456,789
答案:"123 456 789".replace(/\s+/g,',') --------------------编程问答--------------------
徒弟。这里不是用JS来操作。 用正则或者其他来操作的。 --------------------编程问答-------------------- 规律是用空格替换逗号,双引号中的逗号保留,双引号中双引号保留,外层双引号移除。
求解啊。。 --------------------编程问答-------------------- 没看出你所说的规律
"ha,,,,""棋子"""
是怎么变成
ha,,,,"棋子"
的 --------------------编程问答--------------------
最外层的双引号移除,里面的逗号保留,棋子双引号嵌套双引号,保留里面的双引号 --------------------编程问答-------------------- 用split()截取的用法自己上网搜, --------------------编程问答--------------------
汗,你既然都这样能说明白了
写代码还不会
话说我还不能一句话把要做的事
表达的像你这样清楚 --------------------编程问答--------------------
我要能写出来就不会问了 正则不会 截取什么的想了很久实在写不出来 能力有限啊 --------------------编程问答--------------------
我要能写出来就不会问了 正则不会 截取什么的想了很久实在写不出来 能力有限啊 --------------------编程问答-------------------- 典型的不能把自然语言表达成电脑语言,
--------------------编程问答--------------------
大侠 教教我吧 --------------------编程问答--------------------
师傅你咋来啦,嘻嘻,偶没找到规律
--------------------编程问答-------------------- 用正则表达式,但是过程有点复杂:
1、先把两个双引号替换为一个特殊字符,此处是&
2、然后把双引号内的逗号也替换为一个特殊字符,此处为$
3、再依次把所有逗号替换为空格,把引号替换为空字符串
4、最后依次把1、2步处理的内容还原
这里在替换的时候使用到了委托。
在使用之前需要引用正则表达式的名字空间
using System.Text.RegularExpressions;
因其中的逗号有中文逗号,我在程序中做了修改:
static void Main(string[] args)
{
string testString="1,sam,6.72,\"ha,,,,\"\"棋子\"\"\",\"Hello\"";
Console.WriteLine(testString);
string first=Regex.Replace(testString, "[^\"](\"\")",new MatchEvaluator(Replace1));
Console.WriteLine(first);
string second = Regex.Replace(first, "(\"[^\"]*\")", new MatchEvaluator(Replace2));
Console.WriteLine(second.Replace(",", " ").Replace("\"", "").Replace("&", "\"").Replace("$", ","));
}
public static string Replace1(Match a)
{
return a.Value.Replace("\"\"","&");
}
public static string Replace2(Match a)
{
return a.Value.Replace(",", "$");
}
运行结果为:
1,sam,6.72,"ha,,,,""棋子""","Hello"
1,sam,6.72,"ha,,,,&棋子&","Hello"
1 sam 6.72 ha,,,,"棋子" Hello
请按任意键继续. . . --------------------编程问答-------------------- 笨方法如下
--------------------编程问答-------------------- 学习一下。 --------------------编程问答-------------------- string s = "1,sam,6.72,\"ha,,,,\"\"棋子\"\"\",\"Hello\"";
// 主方法
static string GetNewString(string str)
{
const char replaceChar = '&'; // 将引号内的逗号替换成其他字符
bool has = false;
string sss = "";
foreach (char c in str)
{
switch (c)
{
case ',':
case ',':
sss += has ? replaceChar : c;
break;
case '"':
has = !has;
sss += c;
break;
default:
sss += c;
break;
}
}
string[] arr = sss.Split(new char[] { ',', ',' });
List<string> list = new List<string>();
foreach (string s in arr)
{
string ss = s;
if (ss.Length >= 2 && ss[0] == '"' && ss[ss.Length - 1] == '"')
{
ss = ss.Remove(0, 1);
ss = ss.Remove(ss.Length - 1, 1);
}
list.Add(RemoveQuotes(ss).Replace(replaceChar, ','));
}
return String.Join(" ", list.ToArray());
}
// 递归剥离外层引号,只保留最里层
static string RemoveQuotes(string ss)
{
if (ss.Split('"').Length > 3)
{
ss = ss.Remove(ss.IndexOf('"'), 1);
ss = ss.Remove(ss.LastIndexOf('"'), 1);
return RemoveQuotes(ss);
}
else
{
return ss;
}
}
s = Regex.Replace(s, @"(""([^""]+|""{2})*""|[^,,]+)[,,]?", m => Regex.Replace(m.Value + " ", @"""("")|("")|[,,]( $)", "$1$3"));
--------------------编程问答-------------------- 路過。 --------------------编程问答-------------------- --------------------编程问答-------------------- 规则是:
1.如果没有引号,则原样输出;
2.如果遇到双引号,则双引号内的数据原样输出,并去掉引号,如果引号内的数据是汉字,则保留引号。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 应该是个逗号分隔符文件(csv),可以查一下文件格式,规则很简单 --------------------编程问答-------------------- 这个肯定要多做几次的逻辑处理。一个简单的处理恐怕不能完成。
replace或者split来做。具体不实验了,脑子现在有点木。
--------------------编程问答-------------------- 试下看看
string str = @"1,sam,6.72,""ha,,,,""""棋子"""""",""Hello""";--------------------编程问答-------------------- 你能用言语表达的逻辑肯定也能用程序实现的。。。
string result = Regex.Replace(str, @"(?<=[,,])""|""(?=""|$)", "");
Console.WriteLine(result);
用各堆栈不就行了。。。 --------------------编程问答-------------------- 我很奇怪,你txt文件是程序写入的吗,如果是,写入规则是你定的,用符号替换就行了呗
如果是手工输入的,那问题就大了
我只是说自己的想法 --------------------编程问答--------------------
面试题。。
写字符串的话要用转义字符看的不舒服
补充:.NET技术 , C#