当前位置:编程学习 > C#/ASP.NET >>

字符串截取操作

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,',') --------------------编程问答--------------------
引用 4 楼 sara_yhl 的回复:
切,走开。
问题:字符串A="123 456 789" 中间的空格不一定是半角(或多个空格) 怎样讲A变成B="123,456,789
答案:"123 456 789".replace(/\s+/g,',')

徒弟。这里不是用JS来操作。 用正则或者其他来操作的。 --------------------编程问答-------------------- 规律是用空格替换逗号,双引号中的逗号保留,双引号中双引号保留,外层双引号移除。
求解啊。。 --------------------编程问答-------------------- 没看出你所说的规律
  "ha,,,,""棋子"""
是怎么变成
  ha,,,,"棋子"
的 --------------------编程问答--------------------
引用 7 楼 herbt 的回复:
没看出你所说的规律
  "ha,,,,""棋子"""
是怎么变成
  ha,,,,"棋子"

最外层的双引号移除,里面的逗号保留,棋子双引号嵌套双引号,保留里面的双引号 --------------------编程问答-------------------- 用split()截取的用法自己上网搜, --------------------编程问答--------------------
引用 6 楼 jce195447 的回复:
规律是用空格替换逗号,双引号中的逗号保留,双引号中双引号保留,外层双引号移除。
求解啊。。

汗,你既然都这样能说明白了
写代码还不会
话说我还不能一句话把要做的事
表达的像你这样清楚 --------------------编程问答--------------------
引用 10 楼 wangsunjun 的回复:
引用 6 楼 jce195447 的回复:
规律是用空格替换逗号,双引号中的逗号保留,双引号中双引号保留,外层双引号移除。
求解啊。。

汗,你既然都这样能说明白了
写代码还不会
话说我还不能一句话把要做的事
表达的像你这样清楚

我要能写出来就不会问了  正则不会 截取什么的想了很久实在写不出来 能力有限啊 --------------------编程问答--------------------
引用 10 楼 wangsunjun 的回复:
引用 6 楼 jce195447 的回复:
规律是用空格替换逗号,双引号中的逗号保留,双引号中双引号保留,外层双引号移除。
求解啊。。

汗,你既然都这样能说明白了
写代码还不会
话说我还不能一句话把要做的事
表达的像你这样清楚

我要能写出来就不会问了  正则不会 截取什么的想了很久实在写不出来 能力有限啊 --------------------编程问答-------------------- 典型的不能把自然语言表达成电脑语言,
--------------------编程问答--------------------
引用 13 楼 wangsunjun 的回复:
典型的不能把自然语言表达成电脑语言,

大侠 教教我吧 --------------------编程问答--------------------
师傅你咋来啦,嘻嘻,偶没找到规律

引用 5 楼 kongwei521 的回复:
引用 4 楼 sara_yhl 的回复:
切,走开。
问题:字符串A="123 456 789" 中间的空格不一定是半角(或多个空格) 怎样讲A变成B="123,456,789
答案:"123 456 789".replace(/\s+/g,',')

徒弟。这里不是用JS来操作。 用正则或者其他来操作的。
--------------------编程问答-------------------- 用正则表达式,但是过程有点复杂:
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"));
--------------------编程问答-------------------- 路過。 --------------------编程问答-------------------- --------------------编程问答-------------------- 规则是:
1.如果没有引号,则原样输出;
2.如果遇到双引号,则双引号内的数据原样输出,并去掉引号,如果引号内的数据是汉字,则保留引号。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 应该是个逗号分隔符文件(csv),可以查一下文件格式,规则很简单 --------------------编程问答-------------------- 这个肯定要多做几次的逻辑处理。一个简单的处理恐怕不能完成。

replace或者split来做。具体不实验了,脑子现在有点木。

引用 6 楼 jce195447 的回复:
规律是用空格替换逗号,双引号中的逗号保留,双引号中双引号保留,外层双引号移除。
求解啊。。
--------------------编程问答-------------------- 试下看看
            string str = @"1,sam,6.72,""ha,,,,""""棋子"""""",""Hello""";
            string result = Regex.Replace(str, @"(?<=[,,])""|""(?=""|$)", "");
            Console.WriteLine(result);
--------------------编程问答-------------------- 你能用言语表达的逻辑肯定也能用程序实现的。。。
用各堆栈不就行了。。。 --------------------编程问答-------------------- 我很奇怪,你txt文件是程序写入的吗,如果是,写入规则是你定的,用符号替换就行了呗
如果是手工输入的,那问题就大了
我只是说自己的想法 --------------------编程问答--------------------
引用 29 楼 menghuanchiyue 的回复:
我很奇怪,你txt文件是程序写入的吗,如果是,写入规则是你定的,用符号替换就行了呗
如果是手工输入的,那问题就大了
我只是说自己的想法

面试题。。
写字符串的话要用转义字符看的不舒服
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,