黑马程序员技术交流社区

标题: 求助关于字符串分割的问题 [打印本页]

作者: 黑色海    时间: 2013-9-26 20:34
标题: 求助关于字符串分割的问题
本帖最后由 黑色海 于 2013-9-27 10:07 编辑

我想分割一个表达式,其中包含负数,不知道该怎么分割保留负数呢?
例如:分割 8-(8-9)
  算出 8--1,这个时候该怎么分割不会出错呢?
PS:直接用“-” 号分割会出来“8”,“”,“1” 三个字符串
我自己想着是用indexof找出第一个负号的下标,然后判断其后的下标是否为“-”,并且分割后还得移除string数组中的“”字符串,之后再给“1”加上负号进行计算,这个暂时还没试验过。想问问有什么简单方法能直接分割保留负数进行计算呢?
22:18  补充添加
说下刚才试验的结果:
如果是带负数的表达式用“-”分割肯定会出现“”字符
直接判断是否有“”,如果有就replace成“+”(当然,这之前还得判断“”是否在首位,像-8-9这样的表达式,分割出来第一位为“”,不能replace成+ )
ps:如果没有更好的方法,我明天就改成“已解决了”%>_<%



作者: guo329838627    时间: 2013-9-26 21:33
本帖最后由 guo329838627 于 2013-9-26 21:36 编辑

你直接用“--”分割不行?然后再加上那个负号
作者: 七里香    时间: 2013-9-26 21:52
可以先进行一个判断,判断是否两个"-"号连在一起,如果是的话就说明后面的是负号而不是减号,然后再分割吧。当然可以用substring方法截取的说。
比如你要分割8--1.下面是我的思路。仅供参考。
           string n = "8--1";
            //截取-前面的数
            string num1 = n.Substring(0, n.IndexOf('-'));
            //截取-后面的数。
            string num2 = n.Substring(n.IndexOf('-')+1);
            Console.WriteLine(num1+" "+num2);
            Console.ReadKey();
作者: 黑色海    时间: 2013-9-26 22:12
七里香 发表于 2013-9-26 21:52
可以先进行一个判断,判断是否两个"-"号连在一起,如果是的话就说明后面的是负号而不是减号,然后再分割吧 ...

嗯,谢谢,不过我希望找到的是直接分割负数的方法,对于-8-9这样的表达式也能使用。
作者: 黑色海    时间: 2013-9-26 22:14
guo329838627 发表于 2013-9-26 21:33
你直接用“--”分割不行?然后再加上那个负号

我是要保留负数的,用--直接切掉就失去意义了。主要是希望找到带负数表达式的通用分割方法。
比如
-8-9
8-(-8)
等等。。

作者: haxyek    时间: 2013-9-26 22:37
没看明白,你想分割啥字符串,分割成什么样子?


作者: 七里香    时间: 2013-9-26 22:45
判断一下呗,如果第一个字符为-,或者两个”-“然后自己用substring截取啊。
作者: 七里香    时间: 2013-9-26 22:47
只有自己想办法写个方法咯,因为string没有现成的方法分割带负数的字符串。
作者: 七里香    时间: 2013-9-26 22:54
很荣幸地告诉你真的没有现成的方法哦亲,因为两个--或两个+什么符号相连他没办法判断你的符号是一元运算符还是二元运算符,所以只能自己写方法实现咯。
作者: 段朝骞    时间: 2013-9-26 23:10
思路:先将"--"替换成"-fu",再进行分割,然后处理组后的集合得到结果
一下是运行代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace String分割
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "-8--9--10-11-12--13";
            ArrayList arrs = new ArrayList(); //创建一个集合用来编辑存储数组
            str = str.Replace("--", "-fu"); //先将"--"替换成"-fu"
            string[] strs = str.Split('-'); //以'-' 分割字符,得到字符串数组
            if (strs[0] == "") //判断第一个字符是否为空,若为空将第二个字符前加"-"
            {
                strs[1] = "-" + strs[1];  
            }           
            foreach (string item in strs) //遍历字符串数组
            {
                arrs.Add(item.Replace("fu", "-"));//将字符串中的"fu"替换为"-"
                arrs.Remove(""); //移除空字符串,arrs集合就是最后的结果
            }
        }
    }
}

作者: 黑色海    时间: 2013-9-27 10:03
段朝骞 发表于 2013-9-26 23:10
思路:先将"--"替换成"-fu",再进行分割,然后处理组后的集合得到结果
一下是运行代码

学习了,我是想写方法直接计算加减乘除表达式,也包括带括号的;
目前来看,最好的方法是用“-”分割,判断是否有“”,然后判断“”的位置进行替换或者移除。谢谢你的回答!

作者: 黑色海    时间: 2013-9-27 10:05
haxyek 发表于 2013-9-26 22:37
没看明白,你想分割啥字符串,分割成什么样子?

分割表达式的,无论用户输入什么计算表达式,都能直接计算出来,


作者: 黑色海    时间: 2013-9-27 10:06
七里香 发表于 2013-9-26 22:54
很荣幸地告诉你真的没有现成的方法哦亲,因为两个--或两个+什么符号相连他没办法判断你的符号是一元运算符 ...

嗯,自己写,谢谢您的回答!
作者: haxyek    时间: 2013-9-27 10:20
有点小疑问,你是想输入表达式,输出结果,是吗?
作者: 黑色海    时间: 2013-9-27 16:57
haxyek 发表于 2013-9-27 10:20
有点小疑问,你是想输入表达式,输出结果,是吗?

对,输入表达式,直接输出结果




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2