-1

我有一个看起来像这样的字符串:

"PID||000000|Z123345|23345|SOMEONE^FIRSTNAME^^^MISS^||150|F|1111||1 DREYFUS CLOSE^SOUTH CITY^COUNTY^^POST CODE^^^||0123 45678910^PRN^PH^^^^0123 45678910^^~^^CP^^^^^^~^NET^^^^^^^||||1A|||||A||||||||N||||||||||";

我正在尝试删除任何分隔的“|” 第 30 个 '|' 之后的字符 在字符串中,以便输出字符串如下所示:

"PID||000000|Z123345|23345|SOMEONE^FIRSTNAME^^^MISS^||150|F|1111||1 DREYFUS CLOSE^SOUTH CITY^COUNTY^^POST CODE^^^||0123 45678910^PRN^PH^^^^0123 45678910^^~^^CP^^^^^^~^NET^^^^^^^||||1A|||||A||||||||N";

我正在尝试使用尽可能少的代码来做到这一点,但运气不佳。任何帮助或想法都会很棒。

4

6 回答 6

5

您可以使用TrimEnd方法

string text = "stuff||||N||||||||||";
string result = text.TrimEnd('|'); //Result is stuff||||N
于 2013-07-23T21:07:15.300 回答
2

蛮力,但只有一点点代码:

  string s2 = string.Join("|", s1.Split('|').Take(31));

如果您需要对此类数据进行任何其他处理(它看起来像一种嵌套的 CSV),那么string.Split()了解这一点很有用。

于 2013-07-23T21:16:32.727 回答
1
string str = "PID||000000|Z123345|23345|SOMEONE^FIRSTNAME^^^MISS^||150|F|1111||1 DREYFUS CLOSE^SOUTH CITY^COUNTY^^POST CODE^^^||0123 45678910^PRN^PH^^^^0123 45678910^^~^^CP^^^^^^~^NET^^^^^^^||||1A|||||A||||||||N||||||||||";
int c = 0;
int after = 30;
StringBuilder newStr = new StringBuilder();
for(int i = 0;i < str.length; i++){
    if(str[i] == '|'){
        if(after != c){
             newStr.append(str[i]);
             c++;
        }
    }else{
        newStr.append(str[i]);
    }
}

结果是

newStr == "PID||000000|Z123345|23345|SOMEONE^FIRSTNAME^^^MISS^||150|F|1111||1 DREYFUS CLOSE^SOUTH CITY^COUNTY^^POST CODE^^^||0123 45678910^PRN^PH^^^^0123 45678910^^~^^CP^^^^^^~^NET^^^^^^^||||1A|||||A||||||||N";
于 2013-07-23T21:06:34.587 回答
1

如果您真正想要的是第 30 个块之后的所有内容都丢失其“|”,请尝试:

var chunks = input.Split('|');
var output = String.Join('|',chunks.Take(30)) + String.Concat(chunks.Skip(30));

也就是说,我认为听起来你真正想要的可能是这样的:

var output = input.TrimEnd('|');
于 2013-07-23T21:13:59.420 回答
1

正则表达式应该可以解决问题:

var regex = new Regex(@"^([^\|]*\|){0,30}[^\|]*");
var match = regex.Match(input);
if(match.Success)
{
    var val = match.Value;
}
于 2013-07-23T21:30:34.910 回答
0
// Get the indexes of all the | characters.
int[] pipeIndexes = Enumerable.Range(0, s.Length).Where(i => s[i] == '|').ToArray();

// If there are more than thirty pipes:
if (pipeIndexes.Length > 30)
{
    // The former part of the string remains intact.
    string formerPart = s.Substring(0, pipeIndexes[30]);

    // The latter part needs to have all | characters removed. 
    string latterPart = s.Substring(pipeIndexes[30]).Replace("|", "");

    s = formerPart + latterPart;
}
于 2013-07-23T21:10:31.957 回答