我有一个不那么难的问题,我想知道是否有人可以帮助我..
我有一个类似于“ Hello 我是人类 ”的字符串对象 我用Tess4J提取的。 接下来我试图找出这句话中的每个单词是粗体,斜体还是带下划线
之后我要求从方法中返回此信息以及源词。 问题是我不知道合适的数据类型来执行此操作。
如果可能,有人会建议我使用一个好的数据结构吗?
其他要点
这是一个示例结构 -
"Hello" , true , false , false
"Hi", false , false , false
"Hi", true, true, false
非常感谢任何帮助, 谢谢, Sumal。
答案 0 :(得分:6)
只需编写自己的课程。像这样:
public class FormattedText {
private String text;
private boolean bold;
private boolean italic;
private boolean underlined;
// setter and getter
}
答案 1 :(得分:2)
我不确定为什么评论和答案会提示某些字段。通常,在创建类时,应该专注于接口。
特别是,参考要点
这个
中有大量的单词
应该考虑字段无关紧要,并且可以将三个boolean
字段压缩为单个int
字段 - 大致如下:
class FormattedText {
private String string;
private int style;
private static final int PLAIN = 0;
private static final int BOLD = 1;
private static final int ITALIC = 2;
private static final int UNDERLINED = 4;
FormattedText(String string, boolean bold, boolean italic, boolean underlined)
{
this.string = string;
if (bold) style |= BOLD;
if (italic) style |= ITALIC;
if (underlined) style |= UNDERLINED;
}
public String getString() {
return string;
}
public boolean isBold() {
return (style & BOLD) != 0;
}
public boolean isItalic() {
return (style & ITALIC) != 0;
}
public boolean isUnderlined() {
return (style & UNDERLINED) != 0;
}
}
甚至可以进一步“压缩”这一点。如果你真的必须处理这些条目的大量数量,并且取决于这些信息是否/如何改变,你可以考虑一个专用的数据结构,它存储有关所有单词的信息{{1例如。
答案 2 :(得分:1)
另一种自定义类方法,它尝试使用EnumSet
(或Guava的Sets.immutableEnumSet()
)来避免多个布尔标记。
public class FormattedText {
private final String text;
private final Set<TextProperty> properties;
public FormattedText(String text, TextProperty... properties) {
this(text, EnumSet.copyOf(Arrays.asList(properties)));
}
public FormattedText(String text, Set<TextProperty> properties) {
this.text = text;
this.properties = properties;
}
// additional constructors, getters, logic
}
public enum TextProperty {
BOLD, ITALIC, UNDERLINED;
}
像这样使用:
new FormattedText("Hello", TextProperty.BOLD);
这样,您只有一个字段,其中包含对其执行操作的所有必要属性和方法。你可以通过修改enum
轻松添加新属性(删除线,上标等?),你不需要一百万个if-else块的字段。
或者,您甚至可以这样做:
public class FormattedText {
private final String text;
private final Set<TextProperty> properties;
// constructors, getters, logic
}
public interface TextProperty {
// a marker interface
}
public enum StandardTextProperty implements TextProperty {
BOLD, ITALIC, UNDERLINED;
}
这样,如果您将代码部署为供其他人使用的库,则任何人都可以添加新属性。