Replace returns 2 of the same value?
I have a question on why this is happening. First, I'll explain what is going on. I am finding a line in a RichTextBox
and taking a Split
value and replacing it with the same value but with a decimal limit. Here is what my file looks like:
J6 INT-00113G 227.905 174.994 180 SOIC8
J3 INT-00113G 227.905 203.244 180 SOIC8
U13 EXCLUDES 242.210 181.294 180 QFP128
BUT for some reason I am getting this when I try to replace an开发者_StackOverflow社区d output it back out... (the numbers appear twice in both the 3rd and 4th columns)
J6 INT-00113G 227.91227.91 174.99174.99 180 SOIC8
J3 INT-00113G 227.91227.91 203.24203.24 180 SOIC8
U13 EXCLUDES 242.21242.21 181.29181.29 180 QFP128
AND HERE IS MY CODE... WHAT IS THE ERROR TO MAKE IT DO THIS?
string[] myLines = placementTwoRichTextBox.Text.Split('\n');
foreach (string line in myLines)
{
// Matches the entire line.
Match theMatch = Regex.Match(line, @".*");
if (theMatch.Success)
{
// Stores the matched value in string output.
string output = theMatch.Value;
// Replaces tabs and extra space with only 1 space delimiter
output = Regex.Replace(output, @"\s+", " ");
// Splits the specified regex into two different regexs.
var componentItem = output.Split(' ');
double d1 = Convert.ToDouble(componentItem[2]);
double d2 = Convert.ToDouble(componentItem[3]);
double round1 = Math.Round(d1, 2, MidpointRounding.AwayFromZero);
double round2 = Math.Round(d2, 2, MidpointRounding.AwayFromZero);
componentItem[2] = Regex.Replace(componentItem[2], @".*", round1.ToString());
componentItem[3] = Regex.Replace(componentItem[3], @".*", round2.ToString());
// Sets the RichTextBox to the string output.
newPl2ItemsRichTextBox.AppendText(componentItem[0] + " " + componentItem[1] + " " + componentItem[2] +
" " + componentItem[3] + " " + componentItem[4] + " " + componentItem[5] + "\n");
}
}
Does anyone know why this is happening?
Instead of doing all this, simply do your split, since you know index 2 and 3 contain your numbers... simply do something like:
newPl2ItemsRichTextBox.AppendText(componentItem[0] + " " + componentItem[1] + " " + Math.Round(Convert.ToDouble(componentItem[2]), 2) + " " + Math.Round(Convert.ToDouble(componentItem[3]), 2) + " " + componentItem[4] + " " + componentItem[5] + "\n");
Avoid all the other steps, just split and print.
Your expression ".*" hits two matches: Try out following code to reproduce:
static void Main(string[] args)
{
Regex regex = new Regex(@".*");
MatchCollection matches = regex.Matches(" 227.905 ");
foreach (var match in matches)
{
Console.WriteLine("[{0}]", match);
}
Console.ReadKey();
}
Matches are: " 227.905 " and ""
To answer your question: In 227.905 there is a point in the middle which probably lets the replace function work on 227 and 905. That's why the rounded numbers are inserted twice.
精彩评论