golang 用指定的字符串在文本中包装一些跨距(用于突出显示搜索结果)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 用指定的字符串在文本中包装一些跨距(用于突出显示搜索结果)相关的知识,希望对你有一定的参考价值。

func substitute(text, before, after string, positions [][]int) string {
	// flatten
	flatten_positions := make([]int, 2*len(positions))
	for i, pos := range positions {
		flatten_positions[2*i] = pos[0]
		flatten_positions[2*i+1] = pos[1]
	}
	sort.Ints(flatten_positions)

	var count int
	var buffer []rune

	for pos, char := range []rune(text) {
		if pos <= flatten_positions[len(flatten_positions)-1] && pos == flatten_positions[count] {
			if count%2 == 0 {
				buffer = append(buffer, []rune(before)...)
			} else {
				buffer = append(buffer, []rune(after)...)
			}
			count++
		}
		buffer = append(buffer, char)
	}

	return string(buffer)
}

使用FXML在VBox中包装标签文本

我正在编写一个JavaFX应用程序,我想创建一个包含2个长文本的屏幕。我不知道文本提前是什么,它将在运行时由一些代码填充。

要做到这一点,我想我会制作一个带有2个标签的VBox。我假设如果我不添加尺寸,标签将跨越VBox。由于文本很长,我想要它包装。

这是我尝试过的FXML:

<VBox spacing="20" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label fx:id="label1" text="Dummy Text" wrapText="true" />   
      <Label fx:id="label2" text="Dummy Text" wrapText="true" />  
   </children>
</VBox>

这不起作用,因为文本不会换行,而只是偏离窗口的右侧。我需要什么才能让它发挥作用?

答案

尝试设置prefWidth和prefHeight,因为你的标签不知道何时开始换行

<VBox prefHeight="100.0" prefWidth="300.0"  ...

如果这不起作用,请在HBox的父容器上尝试。你在使用场景构建器吗?我建议你使用它

效果很好(自动生成):

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="333.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
   <center>
      <VBox prefHeight="200.0" prefWidth="325.0" BorderPane.alignment="CENTER">
         <children>
            <Label text="Wrap text Wrap text Wrap text Wrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap text" wrapText="true" />
            <Label layoutX="10.0" layoutY="10.0" text="just textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust text" />
         </children>
      </VBox>
   </center>
</BorderPane>
另一答案

您是否在那里使用了类名为“label1”和“label2”的样式表,设置wrapText="true"将无法在fxml代码中使用

  1. 您尝试删除id并在wrapText="true"仍然设置时查看它是否包装

要么

  1. 把一些css代码放到那个将在特定类中包装像 -fx-word-wrap: break-word; 这样的文本的css文件中;

以上是关于golang 用指定的字符串在文本中包装一些跨距(用于突出显示搜索结果)的主要内容,如果未能解决你的问题,请参考以下文章

使用FXML在VBox中包装标签文本

如何在php中包装没有空格的长文本[重复]

如何在多行反应原生 textInput 中包装文本

字符串最大跨距

如何在弹出窗口中包装元素?

在表格报告实验室中包装文本?