字符串截取操作 txt文件中有一行1,sam,6.72,"ha,,,,""棋子""","Hello"要求输出结果:1 sam 6.72 ha,,,,"棋子" Hello 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用JAVASCRIPT 将逗号转换成空格"1,sam,6.72,"ha,,,,""棋子""","Hello"".replace(/\s+/g,' ')不晓得是不是你要的,哈哈,试试吧 切,走开。问题:字符串A="123 456 789" 中间的空格不一定是半角(或多个空格) 怎样讲A变成B="123,456,789答案:"123 456 789".replace(/\s+/g,',') 没看出你所说的规律 "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请按任意键继续. . . 笨方法如下 // 主方法 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; } } string s = "1,sam,6.72,\"ha,,,,\"\"棋子\"\"\",\"Hello\"";s = Regex.Replace(s, @"(""([^""]+|""{2})*""|[^,,]+)[,,]?", m => Regex.Replace(m.Value + " ", @"""("")|("")|[,,]( $)", "$1$3")); 应该是个逗号分隔符文件(csv),可以查一下文件格式,规则很简单 这个肯定要多做几次的逻辑处理。一个简单的处理恐怕不能完成。replace或者split来做。具体不实验了,脑子现在有点木。 试下看看 string str = @"1,sam,6.72,""ha,,,,""""棋子"""""",""Hello"""; string result = Regex.Replace(str, @"(?<=[,,])""|""(?=""|$)", ""); Console.WriteLine(result); 我很奇怪,你txt文件是程序写入的吗,如果是,写入规则是你定的,用符号替换就行了呗如果是手工输入的,那问题就大了我只是说自己的想法 C#安装时自动附加数据库的问题 c#批量插入却没有数据, C#的表格录入方面功能如何啊? C# 定义时类型bool? 什么时候要用到?可为空? DataGridView 怎样判断用户是否已经登陆?(如果不用session和cookie)的话有什么其他方法吗 ? 求助 请高手帮我看看这个c#程序如何改进 我是菜鸟 winform datagridview的checkbox 全选问题及批量删除数据 请问新增加了一个控件,但怎么在工具栏内找不到? 问个逻辑问题 js判断服务器控件隐藏、显示 杨辉三角问题
"1,sam,6.72,"ha,,,,""棋子""","Hello"".replace(/\s+/g,' ')不晓得是不是你要的,哈哈,试试吧
问题:字符串A="123 456 789" 中间的空格不一定是半角(或多个空格) 怎样讲A变成B="123,456,789
答案:"123 456 789".replace(/\s+/g,',')
"ha,,,,""棋子"""
是怎么变成
ha,,,,"棋子"
的
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
请按任意键继续. . .
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"));
string str = @"1,sam,6.72,""ha,,,,""""棋子"""""",""Hello""";
string result = Regex.Replace(str, @"(?<=[,,])""|""(?=""|$)", "");
Console.WriteLine(result);
如果是手工输入的,那问题就大了
我只是说自己的想法