gpt4 book ai didi

JAVA:调整短信字符倒计时

转载 作者:行者123 更新时间:2023-12-02 04:54:13 27 4
gpt4 key购买 nike

我正在 JavaFX8 中开发 SMS 发送应用程序。我需要帮助来调整我的短信计数器功能。

一些背景信息:

一条短信可以包含 160 个字符。如果超过 160 个字符,则会变成多部分短信。因此第二条短信可以包含 146 个字符,第三条短信可以包含 153 个字符。从第三条短信开始,每条短信可以包含 153 个字符。

所以它会像 160 -> 146 -> 153 -> 153 -> 153 ...

现在我想从 160 倒数到 0,然后从 146 倒数到 0,然后从 153 倒数到 0。

这是我到目前为止所拥有的:

smsComposeArea.textProperty().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> {
//Replace all multiple whitspaces with one whitespace
smsComposeArea.setText(smsComposeArea.getText().replaceAll("[^\\S\\r|\\n|\\r\\n]+", " "));
//GSM 03.38 Extended charset ^{}\[~]|€ take up 2 characters - count them as 2 chars. Replace multiple tabs, newlines, whitespaces with one.
int charCount = smsComposeArea.getText().replaceAll("[\\^{}\\\\\\[~\\]|€]{1}", "$0$0").replaceAll("(\\r|\\n|\\r\\n|\\s)+", " ").length();

int countDown;
if(smsComposeArea.getText() == null && smsComposeArea.getText().trim().isEmpty()) {
lblCharCounter.setText("160");
}
else if(charCount >= 1 && charCount <= 160) {
countDown = 160 - charCount;
lblCharCounter.setText(Integer.toString(countDown));
}
else if(charCount >= 160 && charCount <= 306) {
countDown = 146 - (charCount - 160);
lblCharCounter.setText(String.format("2 SMS %s", Integer.toString(countDown)));
}
else if(charCount >= 306 && charCount <= 459) {
countDown = 153 - (charCount - 306);
lblCharCounter.setText(String.format("3 SMS %s", Integer.toString(countDown)));
}
else if(charCount >= 459 && charCount <= 612) {
countDown = 153 - (charCount - 459);
lblCharCounter.setText(String.format("4 SMS %s", Integer.toString(countDown)));
}
else if(charCount >= 612 && charCount <= 765) {
countDown = 153 - (charCount - 612);
lblCharCounter.setText(String.format("5 SMS %s", Integer.toString(countDown)));
}
else if(charCount >= 765 && charCount <= 918) {
countDown = 153 - (charCount - 765);
lblCharCounter.setText(String.format("6 SMS %s", Integer.toString(countDown)));
}
else if(charCount >= 918 && charCount <= 1071) {
countDown = 153 - (charCount - 918);
lblCharCounter.setText(String.format("7 SMS %s", Integer.toString(countDown)));
}
else if(charCount >= 1071 && charCount <= 1224) {
countDown = 153 - (charCount - 1071);
lblCharCounter.setText(String.format("8 SMS %s", Integer.toString(countDown)));
}
else if(charCount >= 1224 && charCount <= 1377) {
countDown = 153 - (charCount - 1224);
lblCharCounter.setText(String.format("9 SMS %s", Integer.toString(countDown)));
}
else if(charCount >= 1377 && charCount <= 1530) {
countDown = 153 - (charCount - 1377);
lblCharCounter.setText(String.format("10 SMS %s", Integer.toString(countDown)));
}


}
);

它按预期工作,但我认为应该有更复杂或更动态的方式来显示倒计时。我认为 IF 语句太多了。

感谢任何帮助!

最佳答案

假设您使用 8 位 SMS 编码,其中每个字符占用一个字节,则会发生以下情况:

  • 如果消息长度最多(含)160 个字符,则您只有一条消息。您剩余的字符为 160 - n,其中 n 是键入的字符数。
  • 如果消息的长度超过 160 个字符(161 及以上),则给定 7 个字节的扩展 UDH,每个段的长度为 153 个字符。这意味着 ⌈n/153⌉ 段。到当前段结束为止的字符数为 ⌈n/153⌉×153-n。

这意味着您根本不应该有很多“if”语句:

if ( charCount <= 160 ) {
nSegments = 1;
countDown = 160 - charCount;
} else if ( charCount % 153 == 0 ) {
nSegments = charCount / 153;
countDown = 0;
} else {
nSegments = charCount / 153 + 1;
countDown = nSegments * 153 - charCount;
}
lblCharCounter.setText(String.format("%d SMS %d", nSegments, countDown) );

关于JAVA:调整短信字符倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28930940/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com