我知道这是一个常见的问题,我已经通过很多论坛来弄清楚我的代码中的问题是什么。
我必须以下列格式读取包含多个块的文本文件:
void Clickthis1 (object sender, EventArgs args)
{
var CategoryName = new StartPage();
CategoryName.TheCategoryName ("Beatrice", /* the list here?*/);
Navigation.PushAsync (CategoryName);
}
void Clickthis2 (object sender, EventArgs args)
{
var CategoryName = new StartPage();
CategoryName.TheCategoryName ("Anna", /* the list here?*/);
Navigation.PushAsync(CategoryName);
}
我有这段代码来读取所有文件,我想在关键字“@Layout”和关键字“return”之间提取每个块。我还需要捕获所有换行符,以便稍后我将能够将每个匹配的块拆分为列表
List<createSomething> ourPitems = new List<createSomething>();
public StartPage ()
{
InitializeComponent ();
}
public class createSomething
{
public string ourUsername {get; set;}
}
public void TheCategoryName (String pHeader, /*New list added here???*/)
{
personHeader.Text = pHeader;
}
protected override void OnAppearing(){
getItems (); }
async void getItems ()
{
var getItems = await parseAPI.myInfo (Application.Current.Properties
["sessionToken"].ToString ());
EmployeeList.ItemsSource = null;
ourPitems = new List<createSomething> ();
foreach (var currentItem in getItems["results"])
{
ourPitems.Add (new createSomething ()
{
ourUsername = currentItem ["YourName"].ToString (),
});}
EmployeeList.ItemsSource = ourPitems;
}
layoutBlock返回size = 1
答案 0 :(得分:1)
我认为这可能是一个所谓的XY问题......如果groovy源只由@Layout
带注释的代码块组成,你可以使用一个调和的贪婪令牌来选择直到下一个注释(view online demo)。
将模式loc更改为:
Pattern pattern = Pattern.compile( "@Layout(?:(?!@Layout).)*", Pattern.DOTALL );
PS :正则表达式中的dotall标志(?s)
和参数Pattern.DOTALL
执行相同的操作(启用所谓的多行模式) ,只使用其中一个无差别。
<强>更新强>
我尝试了你的代码,问题(保留换行符)在你用来玷污文件的方法中(bufferedReader.readline()
删除字符串末尾的换行符。)
添加到allText
时,只需读取换行符:
String ln = System.lineSeparator();
while((line = bufferedReader.readLine()) != null) {
allText.append(line + ln);
}
或者您可以使用以下代码替换所有代码以篡改文件:
import java.nio.file.Files;
import java.nio.file.Paths;
//can throw an IOException
String filePath = "/path/to/layout.groovy";
String allText = new String(Files.readAllBytes(Paths.get(filePath)),StandardCharsets.UTF_8);