如何解决Unity字符串替换
我在使用统一引擎方面有点问题。 我试图结合一种方法来替换另一个字符串中的一个字符串。 如果我使用通常设置的字符串,则代码有效(例如string b =“ whatever”); 但是,当我尝试使用列表中的变量时,输出没有被修改(例如,excludedWords [0])。 我尝试在我排除的Words变量的所有位置将其转换为字符串,但仍然没有成功。
有什么见解吗?
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using TMPro;
public class FilterRex : MonoBehaviour
{
List<string> excludedWords;
[SerializeField]TextAsset excludedWordsFile;
[SerializeField]TMP_InputField inputField;
// Start is called before the first frame update
void Start()
{
//this code accesses the words from the lists that need to be banned
excludedWords = new List<string>();
string[] lines = excludedWordsFile.text.Split('\n');
foreach(string line in lines)
{
excludedWords.Add(line);
}
Debug.Log(excludedWords[0]);
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Return))
{
PrepareTheWord();
}
}
public void PrepareTheWord()
{
string innerWord = inputField.text.ToLower();
string b = excludedWords[0].ToString());
inputField.text = ReplaceTheWord(b,innerWord);
}
public string ReplaceTheWord(string _replace,string _from)
{
string output = _from.Replace(_replace,"");
return output;
}
}
解决方法
如果您要更改列表中的字符串值,则需要直接为其分配:
excludedWords[0] = ReplaceTheWord(excludedWords[0],innerWord);
C#中的字符串是不可变的,因此,如果要更改它们的值,则必须重新分配它们。
编辑:
如果要替换输入文本中出现的排除单词,则您的PrepareTheWord
方法如下所示:
public void PrepareTheWord()
{
string innerWord = inputField.text.ToLower();
foreach (string excludedWord in excludedWords)
{
innerWord = innerWord.Replace(excludedWord,"");
}
inputField.text = innerWord;
}
这不是最有效的方法,但是应该可以完成工作。
,因此快速修复。我注意到,如果我创建一个数组并键入该数组的元素,它将可以正常工作。这不是最有效的方法,也不是愉快的方法,但是暂时可以完成工作。
另一方面。我不确定这是否与统一有关,但我确定这与PC无关。我已经在自2019年以来具有不同统一版本的三台不同PC上测试了此代码。它们的行为似乎都相同。 我敢肯定,我会发现这个问题,但是暂时,我将专注于其他更新。 我要感谢阅读并回复我的询问的所有人,并祝大家愉快!
我已经测试了由新项目制作的unity 2018版本,仍然是同一问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。