给出以下我从XML文件中读取的值:
00B50578 00A41434 00B50578
并且,给出以下字符串:
string foo = "6F6F6F6F6F";
我想以某种方式用“foo”中的字符替换我正在从XML文件中读取的字符。但是,我想在“00”之后开始替换这些字符,并且只能继续替换这些字符,使其等于“foo”的长度。所以,如果我按照自己的方式行事,新值将如下:
00的 6F6F6F 00的 6F6F 34 00B50578
我尝试了几种方法来解决这个问题,但无济于事。
假设我将XML值读入名为“arrXmlValues”的数组中,我编写的代码看起来像这样......
string foo = "6F6F6F6F6F";
string[] arrXmlValues = new String[] { xmlReader.GetAttribute("w:val") };
foreach (string r in arrXmlValues)
{
Console.WriteLine("Original value was : {0}", r);
StringBuilder sb = new StringBuilder(r);
sb.Remove(2, foo.Length);
sb.Insert(2, foo);
Console.WriteLine("New value is : {0}", sb);
Console.WriteLine("");
}
这里需要注意的是,十六进制值的8位数字必须保持不变。所以,我一次只能替换每个块中的6个字符,并且未写入列表中第一个块的任何内容必须写入列表上的第二个块,但前提是我已经离开写入了变量“foo”...
当然,可以通过新的方式来实现这一目标以及您可能提供的任何想法。我不是一个强大的程序员,但我的目标是为学校项目解决这个问题,同时也要学习。
我感谢任何帮助,指导。实现这一目标的示例代码将非常棒。谢谢!!!
答案 0 :(得分:2)
这是一个有趣的。关键是在处理之前将输入字符串分解为较小的子集,因为您需要保持空格对齐。
static void Main(string[] args)
{
string input = "00B50578 00A41434 00B50578";
string foo = "6F6F6F6F6F";
// start with a queue of characters filled with the
// letters we are going to put into the input string.
Queue <char> fooQueue = new Queue<char>(foo);
StringBuilder result = new StringBuilder();
// iterate through each split, so that we maintain spaces.
foreach (var item in input.Split(' '))
{
// go through each set of two characters in this specific chunk.
for (int i = 0; i < item.Length - 1; i += 2)
{
var substring = item.Substring(i, 2); // look at each chunk.
if (substring == "00") // if the chunk is 00, then append 00.
{
result.Append("00");
}
else // otherwise
{
// take either the next two characters out of the queue
//and append them, or if the queue is empty, append the
//letters from the original text.
for (int j = 0; j < 2; j++)
{
if (fooQueue.Count >= 1)
result.Append(fooQueue.Dequeue());
else
result.Append(substring[j]);
}
}
}
// add a space at the end of the chunk.
result.Append(' ');
}
// print all the chunks, but trim the end (which should at
// this point have an additional space at the end.
Console.WriteLine(result.ToString().Trim());
}
答案 1 :(得分:0)
可以使用...
// Real Time Departure from a given station
router.route('/departTimeStation')
.get(function(req, res) {
vCmd = 'etd';
vOrig = req.query.vOriginStation;
vDir = 'n'; // [NOTE] - 'n' or 's', north or south, OPTIONAL
vPlat = 1; // [NOTE] - 1 to 4, number of platform, OPTIONAL
var xoptions = {
host: 'api.bart.gov',
path: '/api/etd.aspx?cmd=' + vCmd + '&orig=' + vOrig + '&key=' + config.bart.client
};
var xcallback = function(response) {
response.on('data', function(chunk) {
vParsed += chunk;
});
response.on('end', function() {
parseString(vParsed, function(err, result) {
vShow = JSON.stringify(result);
vTemp = result;
});
});
};
http.request(xoptions, xcallback).end();
return res.send (vTemp)
});
...
循环和变量(for
)来跟踪index
字符串中剩余的字符数。
foo